как настроить jenkins на win10 для использования cygwin bash - PullRequest
0 голосов
/ 22 января 2020

Можно ли выполнить шаг sh в jenkins с Cygwin? То, что я пробовал, не работает.

Чтобы получить шаг sh, работающий с cygwin, я использовал экран конфигурации http://<jenkins>:8080/configure и настроил для запуска исполняемого файла Shell C:\\cygwin64\\bin\\bash.exe Но при запуске тестового конвейера

node {
    stage('1'){
        bat "dir C:\\cygwin64\\bin\\bash.exe"
        sh 'ls ..'
    }
}

это результат.

Running on Jenkins in J:\workspace\try_shellx
[Pipeline] {
[Pipeline] stage
[Pipeline] { (1)
[Pipeline] bat

J:\workspace\try_shellx>dir C:\cygwin64\bin\bash.exe 
 Volume in drive C has no label.
 Volume Serial Number is 9CDC-D180

 Directory of C:\cygwin64\bin

01/27/2017  01:13 PM           739,859 bash.exe
               1 File(s)        739,859 bytes
               0 Dir(s)  294,634,586,112 bytes free
[Pipeline] sh
sh: C:\cygwin64\bin\bash.exe: command not found
[Pipeline] }
[Pipeline] // stage

Таким образом, sh "ls .." не может выполнить, потому что bash не может быть найдено, но dir C:\\cygwin64\\bin\\bash.exe найдено с шагом bat

Любая помощь приветствуется

1 Ответ

0 голосов
/ 24 января 2020

наконец-то понял. Это сбивает с толку из-за прямой и обратной косой черты и не будет работать без файла 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.

enter image description here

Теперь, когда вы выполняете команду 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, которые доступны только по этому пути.

enter image description here enter image description here

Если у вас есть проблемы с этой настройкой, вы можете использовать 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. Я просто не удосужился зайти так далеко.

...