ほげほげ見聞録

技術メモ、備忘録、使い方はそのうち覚える

Windows環境下のJenkinsでshコマンドを使う

Jenkins導入の際に困ったことなどのメモ、その二。

Windowsでshコマンド使いたい

JenkinsがWindows上にあるが、Pipelineで以下のようにshコマンドを使って色々やりたくなった。
特に設定してない状態だとビルドは失敗する。

node {
  stage('stage1') {
    sh 'echo Hello World.'
  }
}

方法

Cygwinを入れて使用

ryoichi0102.hatenablog.com

Gitのsh.exeをシェルのパスとしてJenkinsに通して使用

http://to-developer.com/blog/?p=1412to-developer.com

ざっくり調べて上の二つが簡単そうだった。
今回はGitがWindowsに既にインストール済だったので、二番目を試すことにした。



Gitのsh.exeをJenkinsで使う

システムの設定でシェルのパスを指定できる。
試してみたら以下のようなエラー発生。

java.io.IOException: CreateProcess error=2, 指定されたファイルが見つかりません。
Caused: java.io.IOException: Cannot run program "nohup" (in directory "【Jenkinsパス】\jobs\【job名】\workspace"): CreateProcess error=2, 指定されたファイルが見つかりません。


以下のイシューに書いてあった。
nohup.exeがsh.exeと別にあるので、リンクを張ってやるといいとかなんとか。

https://issues.jenkins-ci.org/browse/JENKINS-33708issues.jenkins-ci.org stackoverflow.com

エラーが以下に変わった。

nohup: failed to run command 'sh': No such file or directory


システム設定のシェルのパスを削除すると上手くいくらしいが、同じエラー。

ここで、nohupは問題ないのだから同じフォルダにsh.exeのリンクを張ってやれば良いのではと考える。
ビルド成功。

最終的に、以下のリンクを作成した。
環境によってパスは適宜変更。

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"

mklink "C:\Program Files\Git\cmd\nohup.exe" "C:\Program Files\git\usr\bin\nohup.exe"
mklink "C:\Program Files\Git\cmd\msys-2.0.dll" "C:\Program Files\git\usr\bin\msys-2.0.dll"
mklink "C:\Program Files\Git\cmd\msys-iconv-2.dll" "C:\Program Files\git\usr\bin\msys-iconv-2.dll"
mklink "C:\Program Files\Git\cmd\msys-intl-8.dll" "C:\Program Files\git\usr\bin\msys-intl-8.dll"

mklink "C:\Program Files\Git\cmd\sh.exe" "C:\Program Files\git\bin\sh.exe"