наконец-то понял. Это сбивает с толку из-за прямой и обратной косой черты и не будет работать без файла bat по неизвестной причине. Первый шаг - сделать копию Cygwin.bat
обычно в c:\cygwin64\
dir
copy C:\cygwin64\Cygwin.bat C:\cygwin64\CygwinForJenkins.bat
edit C:\cygwin64\CygwinForJenkins.bat
, чтобы он выглядел следующим образом.
@echo off
c:\cygwin64\bin\bash %*
, затем установите Shell executable
Настройка на экране управления «Настроить систему», чтобы указать на этот новый файл bat и игнорировать все ошибки, которые могут показать вам. Обратите внимание на косые черты без DOS.
Теперь, когда вы выполняете команду sh "find ."
или другую команду linux, команда упаковывается jenkins в временный скрипт и вызывается следующим образом.
C:/cygwin64/CygwinForJenkins.bat -xe J:/workspace/try_shellx@tmp/durable-aa951084/script.sh
CygwinForJenkins.bat
затем передает временный скрипт в cygwin bash .exe, как это, используя DOS arg glob %*
c:\cygwin64\bin\bash -xe J:/workspace/try_shellx@tmp/durable-aa951084/script.sh
Кроме того, вам понадобится C:\cygwin64\bin
в вашем пути windows SYSTEM (находится под панелью управления в разделе Система или используйте поиск, показанный ниже). Это потому, что Jenkins также добавляет команды nohup, которые доступны только по этому пути.
Если у вас есть проблемы с этой настройкой, вы можете использовать set
, чтобы показать windows ENV в файле Bat. И установка @echo on
покажет все команды в среде DOS, как я пришел к решению.
У меня есть мои jenkins под J:\\workspace
, и я следовал этому решению, чтобы сделать это Подсистема
Windows для Linux (WSL) не будет работать с этим, потому что она не понимает прямую запись sla sh в путях, которые Jenkins передает cygwin bash. Плагин для долговременных задач делает это scriptPath.replace("\\", "/")
, о котором мы говорили в источнике . Поэтому вы должны отменить эту замену в сценарии bat, прежде чем передать его в WSL, и он будет выглядеть примерно так:
C:\Windows\System32\bash.exe -xe J:\\workspace\\try_shellx@tmp\\durable-aa951084\\script.sh
Возможно, вы могли бы сделать это с помощью команды sed like для Windows. Я просто не удосужился зайти так далеко.