Можем ли мы выполнить команды vim из сценария оболочки внутри jenkins? - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть метод @Test, написанный на Java, который вызывает скрипт оболочки.Сценарий оболочки содержит команду vimdiff, используемую для генерации сравнения кода между двумя html-файлами.

Когда я запускаю этот метод тестирования из jenkins, сценарий оболочки выполняется.Но команда vimdiff не выполняется.

Java-метод, который вызывает сценарий оболочки

try {
            File[] uiDiffDir = getFiles();

            for (File file : uiDiffDir) {

                String[] cmd = {"sh", shellScriptPath, beforeHtmlPath + file.getName(), afterHtmlPath + file.getName(),
                        codeComparisonPath + file.getName()};
                Process p = Runtime.getRuntime().exec(cmd);
                p.waitFor();
                BufferedReader reader = new BufferedReader(new InputStreamReader(
                        p.getInputStream()));
                String line;
                while ((line = reader.readLine()) != null) {
                    System.out.println(line);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

shell.sh

 vimdiff -c 'set foldlevel=9999' $1 $2 -c TOhtml -c 'w! '"$3"'' -c 'qa!'

Этот метод работает отличноиз моего intellij, но изнутри Дженкинс vimdiff не работает.От Дженкинса я проверил, что аргументы передаются правильно, используя операторы echo.Так что это не проблема.Итак, мой вопрос: работает ли vimdiff изнутри Дженкинс?Может кто-нибудь помочь мне с этим вопросом.Я немного растерялся.

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

По умолчанию vim.tiny был установлен на сервере jenkins.vim.tiny - это компактная версия vim, и она не поддерживает vimdiff в соответствии с документацией vim.Таким образом, vimdiff не был запущен в сценарии оболочки.В качестве обходного пути я включил следующие команды в Pre-Build Steps -> Execute shell

#!/usr/bin/env bash
sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) main universe"
sudo apt-get update
sudo apt-get -y install libncurses5-dev
sudo apt remove -y vim-tiny
sudo apt-get -y install vim
echo syntax off> ~/.vimrc

Функциональность каждой команды:

  • sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu $ (lsb_release -sc) основная вселенная"

    sudo apt-get update

    sudo apt-get -y установить libncurses5-dev

    Приведенные выше три команды устанавливают необходимые библиотеки для выполнения команды sudo apt-get install.Если указать '-y' в команде sudo, то для запросов терминала, которые запрашивают у пользователя разрешение на установку, автоматически будет указано значение yes

  • sudo apt remove -y vim-tiny

    sudo apt-get -y install vim

    Приведенные выше две команды удаляют vim-tiny и затем устанавливают полную версию vim

  • echo syntax off> ~ / .vimrc

    По умолчанию подсветка синтаксиса была включена в vimdiff.Таким образом, внешний вид вывода vimdiff был очень плохим.Таким образом, приведенная выше команда создает файл «.vimrc», добавляет к нему «синтаксис выключен» и сохраняет его.Это отключит подсветку синтаксиса в выводе vimdiff и улучшит внешний вид

После выполнения всех этих шагов в шаге предварительной сборки Jenkins vimdiff стал доступен внутрив настоящее время выполняется сборка jenkins, и я смог использовать приведенную ниже команду vimdiff в моем сценарии оболочки, которая вызывается из метода java.

/usr/bin/vimdiff -c 'set foldlevel=9999' $1 $2 -c TOhtml -c 'w! '"$3"'' -c 'qa!'
0 голосов
/ 21 сентября 2018

Это, вероятно, не на $PATH для пользователя jenkins.Попробуйте ввести абсолютный путь к vimdiff.

edit : учитывая вашу информацию из комментариев, вам, вероятно, нужно

  • Создать символическую ссылку дляvimdiff на вашем сервере jenkins примерно так:

    ln -s /usr/bin/vim.tiny /usr/bin/vimdiff 
    
  • Вызовите этот двоичный файл с символическими ссылками (/usr/bin/vimdiff), используя абсолютный путь из вашего кода Java

...