Можем ли мы выполнить команды vim из сценария оболочки внутри jenkins?

У меня есть метод @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, но изнутри jenkins vimdiff не работает. От Дженкинса я проверил, что аргументы передаются правильно, используя операторы echo. Так что это не проблема. Итак, мой вопрос: работает ли vimdiff изнутри Дженкинс? Может кто-нибудь помочь мне с этим вопросом. Я немного смущен.

2 ответа

Решение

По умолчанию 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 удалить -y vim-tiny

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

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

  • эхо-синтаксис выключен> ~/.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!'

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

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

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

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

Другие вопросы по тегам