Jenkinsビルドステップで永遠のプロセスを開始しますか?


17

Jenkinsの展開の最後にシェルコマンドを実行して、永久スクリプトを再起動します。

npm install && forever stop app.js && forever start -a -l /var/log/forever.log app.js

ユーザーjenkinsとしてそれを実行すると、すべてが正常に機能し、ビルド履歴からのコンソール出力にも、foreverスクリプトが実行されていることが示されます。ただし、展開が終了し、永久プロセスが停止した直後にプロセスが停止します。

この動作の原因は何ですか?どのように修正できますか?

回答:


28

Jenkinsは、ジョブによって生成されたすべてのプロセスを強制終了します。

これを無効にするには、BUILD_ID環境変数を別の値に設定します。

export BUILD_ID=dontKillMe

詳細については、https://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKillerを参照してください


1
これは「クリーン」な方法ですか、それとも他の推奨事項ですか?
パトリック

私の知る限り、それはProcessTreeKillerを無効にする唯一の方法
です-rcomblen

rcomblenは正しいです。wiki.jenkins
Jan Molak

この前に私は得ていた。[ssh-agent]停止しました。シグナル15によって殺されました。シグナル15によって殺されました。この後、[ssh-agent]が停止しました。しかし、それはまだ殺されています:(
アミットクマールグプタ

1

質問はかなり古いですが、この場合にはもっと良い解決策があると思います。

ビルド後スクリプトプラグインを使用する

プラグイン自体は2016年の初め以来更新されていませんが、仕事をしており、環境変数をいじる必要はありません。私には少しきちんとしたようです。


0

新しいPipelineジョブでは、設定は機能しBUILD_IDなくなりました。代わりJENKINS_NODE_COOKIEに、ジョブが終了したときにJenkinsがプロセスを強制終了しないように設定する必要があります。

sh 'export JENKINS_NODE_COOKIE=dontKillMe'
sh 'myProcess'

または、より選択的に:

sh 'JENKINS_NODE_COOKIE=dontKillMe myProcess'

ProcessTreeKillerのwikiおよびJenkins Jiraのこのコメントを参照してください。


0

で試してください:

(
  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 &
) &
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.