Jenkinsデプロイメントの最後にシェルコマンドを実行して、永久スクリプトを再起動しています。
npm install && forever stop app.js && forever start -a -l /var/log/forever.log app.js
ユーザーjenkinsとしてそれを実行すると、すべてが正常に動作し、ビルド履歴からのコンソール出力からも、永久スクリプトが実行されていることがわかります。ただし、プロセスは展開が完了した直後に停止し、無期限のプロセスが停止します。
この動作の原因と修正方法を教えてください。
Jenkinsは、ジョブによって生成されたすべてのプロセスを強制終了します。
これは、BUILD_ID
環境変数を別のものに:
export BUILD_ID=dontKillMe
詳細は https://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller を参照してください
質問はかなり古いですが、この場合にはもっと良い解決策があると思います。
プラグイン自体は2016年の初め以来更新されていませんが、それは機能し、環境変数をいじる必要はありません。私には少しすっきりしているようです。
新しいパイプラインジョブでは、BUILD_ID
の設定は機能しなくなりました。代わりに、JENKINS_NODE_COOKIE
を設定して、Jenkinsがジョブの終了時にプロセスを強制終了しないようにする必要があります。
sh 'export JENKINS_NODE_COOKIE=dontKillMe'
sh 'myProcess'
または、より選択的に:
sh 'JENKINS_NODE_COOKIE=dontKillMe myProcess'
ProcessTreeKillerのwiki および Jenkins Jiraのこのコメント を参照してください。
試してみてください:
(
set -e
export BUILD_ID=dontKillMe
export JENKINS_NODE_COOKIE=dontKillMe
npm install
forever stop app.js
forever start -a -l /var/log/forever.log app.js &
) &