homebrew
Jenkins

HomeBrewで入れたJenkinsをデーモン化

More than 5 years have passed since last update.


手動で起動

alias jenkins_server='java -jar /usr/local/opt/jenkins/libexec/jenkins.war --httpPort=8081'

上記のようなaliasを切って手動で起動していたが、時々忘れるのでデーモン化してみた。

※ポートは8081にカスタマイズ。


デーモン化

brew infoで情報取得

-> % brew info jenkins

jenkins: stable 1.541, HEAD
http://jenkins-ci.org
/usr/local/Cellar/jenkins/1.541 (5 files, 188M) *
Built from source
From: https://github.com/mxcl/homebrew/commits/master/Library/Formula/jenkins.rb
==> Caveats
Note: When using launchctl the port will be 8080.

To have launchd start jenkins at login:
ln -sfv /usr/local/opt/jenkins/*.plist ~/Library/LaunchAgents
Then to load jenkins now:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist
Or, if you don't want/need launchctl, you can just run:
java -jar /usr/local/opt/jenkins/libexec/jenkins.war

言われた通り実行してみる

-> % ln -sfv /usr/local/opt/jenkins/*.plist ~/Library/LaunchAgents

-> % launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist

が、mvnのパスが通ってない、日本語が化ける、色々と問題あり。

手動で起動していた場合は、ユーザが設定した環境変数がそのまま渡るが、デーモン化すると上手く渡らない模様。


環境変数を渡す

ググッてみた所、

/etc/launchd-user.conf



/etc/launchd.conf

をいじればいいとのこと、実際にやってみるが何故か渡らない。

試行錯誤の末、最終的に

~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist

をカスタマイズすることで解決した。

差分はこんな感じ

-> % diff homebrew.mxcl.jenkins.plist homebrew.mxcl.jenkins.plist.org

5,13d4
< <key>EnvironmentVariables</key>
< <dict>
< <key>PATH</key>
< <string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin/:/opt/X11/bin</string>
< <key>JAVA_TOOL_OPTIONS</key>
< <string>-Dfile.encoding=UTF8</string>
< <key>MAVEN_OPTS</key>
< <string>-Djava.awt.headless=true</string>
< </dict>
23d13
< <string>--httpPort=8081</string>


コメント

・PATH

mvnにパスを通すため。

export PATH=/usr/local/bin:$PATH のように展開させたかったが出来なかった。

あと、/etc/paths もなぜか無視される。

・JAVA_TOOL_OPTIONS

-Dfile.encoding=UTF8: 日本語の文字化け対応

・MAVEN_OPTS

-Djava.awt.headless=true: mvn起動時に変なコーヒーカップのウィンドウが立ち上がるのを防ぐ

・その他

~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist

はカスタマイズしたので、念のためシンボリックリンクじゃなくてコピーを取っておいたほうがいいと思います。