特定のJenkinsジョブに「killSoftly」を設定する方法は?


11

Jenkinsビルドは、ビルドとビルド後のステップの間にハングします。

コンソール出力は、6分の待機があることを示しています(ただし、最大1時間の待機が確認されています)。

10:53:26 BUILD FAILED in 1m 7s
10:53:26 4 actionable tasks: 4 executed
10:53:26 Build step 'Invoke Gradle script' changed build result to FAILURE
10:53:26 Build step 'Invoke Gradle script' marked build as failure
11:09:29 [CucumberReport] Using Cucumber Reports version 4.9.0

私はこれと同様の問題があるこの質問を見つけました、そして彼らは解決策がで設定さ-DSoftKillWaitSeconds=0れていると言いjenkins.xmlます。

ただし、グローバルJenkins設定をいじることなく、特定のジョブのみにオプションを設定する方法が必要です(他のプロジェクトをいじりたくありません)。

編集:

ジョブを手動で中止すると、[CucumberReport]ステップの前にCucumberレポートが引き続き生成されます。

また、[ビルド環境]オプションの[ビルドが停止した場合はビルドを中止する]チェックボックスをオンにし、No Activityタイムアウト戦略を(タイムアウト秒数= 2)に設定しました。

これらの設定でプロジェクトをビルドすると、以前のようにビルド履歴に「0秒後に中止」と表示されてビルドが失敗しますが、コンソールの出力は同じです。(何も変化せず、キュウリレポートが生成されますが、一定のタイムアウトの後で)。


パラメータで何を達成したいですか?多分これのためのより簡単な解決策があります。
Michael Kemmerzell

ビルドフェーズ後の待ち時間を短縮したい。コンソール出力からわかるように、ビルドとビルド後のステップの間には6分の待機があります。
メイトMršeJan

パイプラインの一部を提供できますか?私はジェンキンスが単に立ち往生しているとは思えません-ここで何かが発生する必要があります。
Michael Kemmerzell

実際のコードを共有できないため、一部を編集して共有できるように、パイプラインのどの部分に関心があるかを具体的に説明できますか?
メイトMršeJan

timeoutパイプにオプションを設定することはできませんか?パイプの簡略版を必ず投稿してください。何が悪いのかを「推測」するのは難しい。また、この質問はdevops.stackexchange.com
tftd

回答:


4

ジョブ固有の値を選択するSoftKillWaitSecondsことはできません(値は、ジョブ名が不明な時点でJenkinsコアから取得されます)。

私の推奨は、ジョブ自体の中止処理修正することです。そのため、「ソフトキルタイムアウト」に依存しません。Unix風のシステムで実行している場合、新しいプロセスグループ(set -mbash内)でジョブを実行し、(たとえば)適切な終了トラップを設定することで、これを確認できます。


私はJenkinsを初めて使用するので、「新しいプロセスグループ(bashでset -m)でジョブを実行し、(たとえば)適切な終了トラップを設定する」で拡張できますか?
メイトMrše

これはジェンキンス自身とは無関係です。このアプローチは、ジョブに「シェルの実行」ビルドステップが含まれる場合(またはそれを変更できる場合)に使用できます。次に、新しいプロセスグループを作成するには、「セット-m」を使用し、かつ示すようにトラップを使用し、ここで、グループ内のすべてのプロセスが殺されることを保証するために。
Alex O

3

Build-timeoutプラグインを使用して、タイムアウト戦略がNo Activityまたはに設定されたスタックジョブを強制終了していAbsoluteます。私にとって、これはフリースタイルプロジェクトを使用しているときの良いアプローチです。ビルドが「0秒後に中止」される理由は、未完了の子プロセスがある可能性が高いためです。ドキュメントから:

Javaでは、一連の固定された場所でのみスレッドに割り込むことができるため、ビルドのハング方法によっては、中止操作が有効にならない場合があります。例えば、

  • Jenkinsが子プロセスの完了を待っている場合は、すぐに中止できます。
  • Jenkinsが無限ループに陥っている場合、中止することはできません。
  • JenkinsがJava VM内でネットワークまたはファイルI / O(長時間のファイルコピーやSVN更新など)を実行している場合は、中止できません。

絶対タイムアウト戦略を試すことができます。グローバル変数を定義して、ジョブでタイムアウト値を繰り返さないようにすることができます。

  1. [Jenkinsの管理]> [システムの構成]に移動します。
  2. 「グローバルプロパティ」の「環境変数」を確認してください。
  3. 環境変数name = "GLOBAL_TIMEOUT_MINUTES" value = "20"を追加します。
  4. プロジェクトの構成ページに移動します。
  5. 「ビルド環境」の「スタックした場合はビルドを中止する」にチェックを入れてください。
  6. 「タイムアウト戦略」で「絶対」を選択します。もちろん、他の戦略にも適用できます。
  7. 「タイムアウト」に「$ {GLOBAL_TIMEOUT_MINUTES}」を設定します。
  8. タイムアウトアクション「ビルドの中止」を設定します。

これが機能しない場合は、ログhttps:// your-jenkins-server / logまたはスレッドダンプを調べてみてください。
ハングは、プラグインの新旧のバージョンが原因である可能性があります。未完成の子プロセスを見つけてください。ビルド後のアクションを1つずつ無効にして、問題の原因である可能性のあるアクションを見つけてください。あなたは/superuser/1401879/debugging-what-happens-when-a-jenkins-build-unexpectedly-pauses-or-hangsを見ることができます


しかし、役に立つ情報に賛成しても、私の問題は解決しません。私はすでにタイムアウトプラグインをビルドしようとしましたが、成功しませんでした。
メイトMršeJan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.