状況
Jenkinsfile 内のシェルコマンドで、デーモン的なコマンド(バックグラウンドで動作させるようなコマンド)を実行しようとしても実行されない*1。
結論
JENKINS_NODE_COOKIE=dontKillMe を daemon コマンドの前に付与する。以下、unicorn を -D オプションで起動する場合を例にします。
node {
stage('deploy') {
sh('JENKINS_NODE_COOKIE=dontKillMe bundle exec unicorn -D')
}
}
補足
検索すると引っかかることが多いのですが、以下のように BUILD_ID=dontKillMe を付与しても動作しません。node { ... } の記述法の場合にはこのような書き方では動作しないようです*2。
node {
stage('deploy') {
sh('BUILD_ID=dontKillMe bundle exec unicorn -D')
}
}
さらに補足
「node { ... } の記述法で……」という話が出ましたのですこし付記します。現在では node { ... } ではなく pipeline { ... } を用いることが推奨されています*3。詳しくは以下のページをご覧ください。