状況
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。詳しくは以下のページをご覧ください。