Можем ли мы выполнить команды 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