Измените оболочку Windows в Jenkins (с Cygwin на Git Bash / msys)

У меня есть подчиненное устройство Windows 7 и Windows Server 2012 с уже настроенным агентом Jenkins и Cygwin. Я хочу избежать использования Cygwin и просто использовать оболочку Git Bash, поставляемую с Git для Windows (я думаю, это называется msysgit). Поэтому я переименовал C:\cygwin64 в C:\cygwin64.bak, удалил C:\cygwin64\bin из пути и перезагрузился.

Окно Windows 2012 теперь работает нормально, запускаются сценарии оболочки (Unix), $OSTYPE = msys и uname = MSYS_NT-6.3 (что указывает на то, что оболочка Git Bash запущена).

Коробка Windows 7 ничего не запускает и выдает следующую ошибку:

Удаленная сборка на Win7 в рабочей области C: \ Users \ Jenkins \ workspace \ TEST
[win7] $ sh -xe C: \ Users \ jenkins \ AppData \ Local \ Temp \ hudson5047939025129374618.sh
Система не может найти указанный файл
FATAL: сбой при выполнении команды
java.io.IOException: Невозможно запустить программу "sh" (в каталоге "C: \ Users \ Jenkins \ workspace \ TEST"): CreateProcess
error = 2, Системе не удается найти указанный файл.
на java.lang.ProcessBuilder.start (ProcessBuilder.java:1041)

Итак, мой вопрос: как мне настроить Jenkins для использования C:\Program Files\Git\bin\sh.exe или C:\Program Files\Git\usr\bin\bash.exe для запуска сценариев оболочки?


person gib    schedule 27.01.2016    source источник


Ответы (3)


Я разобрался. Дженкинс просто выберет первый файл sh.exe на пути. В Git Bash есть исполняемый файл по адресу C:\Program Files\Git\usr\bin, поэтому, если вы добавите его в начало пути, его подберет Дженкинс.

После внесения этого изменения вам необходимо перезапустить соединение подчиненного устройства с Jenkins, иначе Path не будет распространяться. Если вы используете Java Web Start, просто закройте окно java и перезапустите его.

person gib    schedule 27.01.2016
comment
C:\Program Files\Git\bin также содержит sh.exe. Есть ли причина не использовать это? - person BitwiseMan; 08.12.2016
comment
@BitwiseMan Понятия не имею. Это символическая ссылка? - person gib; 09.12.2016
comment
Символическая ссылка в Windows? Сомневаюсь. :) В любом случае, мне просто интересно, пробовали ли вы это с более коротким путем. - person BitwiseMan; 14.12.2016
comment
Итак, я только что взглянул на машину, и bash.exe и sh.exe в Git\bin имеют размер 32 КБ, так что я подозреваю, что это просто указатели на реальное местоположение. Я действительно думаю, что Git\bin - лучший вариант по умолчанию, это похоже на путь, который вы должны использовать. Я попробовал другой компьютер с более ранней установкой Git (в Program Files (x86)), но \usr\bin на самом деле там не было. - person gib; 15.12.2016
comment
Вы можете создавать символические ссылки в Windows с помощью mklink. (крупица бонусной информации) - person agm1984; 15.01.2018
comment
Jenkins требует nohup при использовании sh в составе сборок конвейера (см. JENKINS-33708 ), поэтому мне пришлось использовать C:\Program Files\Git\usr\bin в PATH, чтобы он работал, так как nohup.exe там. - person Nick Jones; 23.03.2018
comment
Право, Ник. Ссылка: issues.jenkins-ci.org/browse/JENKINS-33708 I переключился на cygwin и только что настроил путь к окну env. это сработало как шарм - person Nikhil; 13.04.2018
comment
Мне пришлось добавить C: \ Program Files \ Git \ bin и C: \ Program Files \ Git \ usr \ bin в системные переменные env, чтобы это работало, а также перезагрузить компьютер (просто перезапуск веб-запуска java этого не сделал) - person akevan; 24.04.2018

Если у вас есть только агенты Windows и все они имеют установленный Git для Windows в одном месте, вы можете установить исполняемый файл оболочки для всех агентов в конфигурации системы Jenkins.

Выберите Управление Jenkins> Настроить систему, прокрутите вниз до Оболочка и установите исполняемый файл оболочки так, чтобы он указывал на любую оболочку. вы хотите начать с этапа сборки Выполнить оболочку.

Вот пример того, как установить оболочку, которая устанавливается вместе с Git для Windows:

Конфигурация оболочки Jenkins

Примечание. Это не сработает, если у вас одновременно используются агенты Windows и не Windows (JENKINS -38211). Это вызовет аналогичные проблемы, если у вас есть агенты Windows, где sh.exe установлен в разные места (например, смесь 32-битной и 64-битной Windows с использованием места установки по умолчанию для этих платформ). Используйте это только в том случае, если ваша среда содержит только идентично настроенные узлы Windows.

person apa64    schedule 06.10.2016
comment
Спасибо за это, это действительно интересно. Вы знаете, к чему относится этот параметр? Это глобальная настройка на главной машине, поэтому мне неясно, применяется ли она только к мастеру или ко всем подчиненным. - person gib; 06.10.2016
comment
Глобальные настройки, похоже, применимы и ко всем подчиненным, @gibfahn. У меня есть три подчиненных устройства, я установил Git для Windows на всех из них (и главный) и установил исполняемый файл оболочки так, чтобы он указывал на sh.exe. Теперь я могу запускать задания с этапами сборки Execute shell на всех подчиненных устройствах. - person apa64; 07.10.2016
comment
Итак, если вы запустите задание jenkins, которое повторяет путь Windows по умолчанию на машинах, не включает ли это C:\Program Files\Git\bin? - person gib; 07.10.2016
comment
Нет, в пути есть только C:\Program Files\Git\cmd (даже на ведомых устройствах). Я настроил исполняемый файл оболочки, указав полный путь к sh.exe Git. - person apa64; 10.10.2016
comment
Хорошо, звучит так, как будто это будет работать в любом развертывании, если у вас всегда есть оболочка в одном и том же месте (и вы хотите использовать одну и ту же оболочку на всех машинах). Полезно знать, спасибо! - person gib; 10.10.2016
comment
@ apa64 - Это сломается, если у вас есть Linux-машины, на которых нет sh.exe, верно? - person BitwiseMan; 08.12.2016
comment
@BitwiseMan Да, я ожидал, что это сломается, это работает правильно в среде только для Win. Если бы вы могли настроить исполняемый файл оболочки для каждого ведомого устройства, у вас могла бы быть смешанная среда, но это невозможно сделать в Jenkins v. 1.651.3 (по крайней мере, из пользовательского интерфейса). - person apa64; 09.12.2016
comment
@ apa64 - я отправил правку, чтобы выделить эту проблему с этим методом. - person BitwiseMan; 14.12.2016
comment
И да - это ДЕЙСТВИТЕЛЬНО прерывается в env смешанной ОС-подчиненной (только что добавлен первый подчиненный сервер Linux ...). Лучше всего добавить Git usr / bin в PATH на подчиненных устройствах Windows, как указано в принятом ответе. - person apa64; 09.06.2017

Установите git-bash

Убедитесь, что папка Git \ bin (например: C: \ Program Files \ Git \ bin) находится в пути глобального поиска, чтобы Дженкинс нашел sh.exe.

для обновления пути в Windows используйте следующую команду

setx путь% путь%; C: \ Program Files \ Git \ bin

или посмотрите здесь https://www.windows-commandline.com/set-path-command-line/

сделать nohup доступным для Jenkins

  • mklink C: \ Program Files \ Git \ bin \ nohup.exe C: \ Program Files \ git \ usr \ bin \ nohup.exe

  • mklink C: \ Program Files \ Git \ bin \ msys-2.0.dll C: \ Program Files \ git \ usr \ bin \ msys-2.0.dll

  • mklink C: \ Program Files \ Git \ bin \ msys-iconv-2.dll C: \ Program Files \ git \ usr \ bin \ msys-iconv-2.dll

  • mklink C: \ Program Files \ Git \ bin \ msys-intl-8.dll C: \ Program Files \ git \ usr \ bin \ msys-intl-8.dll

Вот и все, теперь вы можете запускать команды оболочки

Удачи

person TARJU    schedule 28.08.2020
comment
Этот ответ лучше, чем следующий, потому что он позволяет запускать как пакетные сценарии Windows, так и сценарии оболочки Unix в вашем Jenkinsfile. - person Jean-François Larvoire; 14.01.2021
comment
У меня все еще проблема с тем, что Дженкинс видит команду bash, даже после перезапуска, похоже, для меня проблема. FATAL: невозможно запустить программу bash: - person bnns; 26.07.2021