Jenkins起動時にPATHに/usr/local/binを設定するようにする
/usr/local/Cellar/homebrew.mxcl.jenkins.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!-- ここから -->
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
<!-- ここまで -->
<key>Label</key>
<string>homebrew.mxcl.jenkins</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/java</string>
<string>-Dmail.smtp.starttls.enable=true</string>
<string>-jar</string>
<string>/usr/local/opt/jenkins/libexec/jenkins.war</string>
<string>--httpListenAddress=127.0.0.1</string>
<string>--httpPort=8081</string>
<string>-Dfile.encoding=utf-8</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
追記するときの注意点
- 環境変数はLabelより前に定義すること
- ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plistには直接編集しない。(サービスを再起動すると/usr/local/Cellar/のファイルがコピーされる。)
brew services で起動したJenkinsだとmvnが実行できない
ターミナルからjenkins
で手動起動していた時にはビルド実行に成功していたのですが、brew servicesから起動するように変更したところ失敗するようになりました。
コンソールを見ると「Caused: java.io.IOException: Cannot run program "mvn" : error=2, No such file or directory」とエラーを出力しており、mvnコマンドが実行でいていないようでした。
- Jenkins > Jenkinsの管理 > システム情報 > 環境変数 > PATHの値が
/usr/bin:/bin:/usr/sbin:/sbin
になっていて/usr/local/binが抜けているのが原因のよう。(brew servicesじゃなくてjenkins
で起動した場合は、/usr/local/binが含まれている。) - Jenkins > Jenkinsの管理 > システムの設定 > グローバル プロパティ > 環境変数 で PATHを
$PATH:/usr/local/bin
としても解消しなかった。
結局、plistに追記することでシステム情報の環境変数に/usr/local/binが表記され、mvnが実行でき、ビルドが成功しました。
brew servicesで実行しようとした理由
Jenkinsのportを8080から変更したかったため。冒頭のplistのように8081に変更していてもjenkins
で手動起動すると8080になってしまうので、brew servicesから実行したら8081でアクセスできたから。
PATHもportも動きが違う原因は同じような気がするが、これはあくまでも自分のPCでの検証用で目的の状況は得られたのでこれ以上の調査はしない予定です。
Jenkinsをアップデートしてもplistがコピーされなかった
今日、homebrewで2.64が公開されてたから早速upgradeして起動したら、portが8080に戻ってた。plistは自動的にコピーされないんですね。なので2.63で編集したplistを持ってきたら8081で接続できてビルドも実行されました。
cleanupする前に気づいてよかった。