web-dev-qa-db-ja.com

Jenkinsビルドを特定のエラー終了値(0以外)でのみ成功としてマークする方法は?

Execute Shellビルドステップを実行してスクリプトを実行し、そのスクリプトが0を返すと、JenkinsSUCCESSとしてビルドにフラグを立て、それ以外の場合はFAILUREは予想されるデフォルトの動作であり、0はエラーがないことを意味し、その他の値はエラーを表します。

戻り値が0以外の特定の値と一致する場合にのみ、ビルドをSUCCESSとしてマークする方法はありますか(例:123...)?

PS:なぜ私がそれを探しているのか不思議に思っている場合は、さまざまな要因に応じて異なる終了値を返すようにスクリプトが記述されているため、Jenkins自体の単体テストを実行できます。 、したがって、特定の設定ミスに応じて特定の値を期待し、Jenkins統合全体がそれらを認識できるようにします。

11
Max

さて、私は_IRC #jenkins_に進みましたが、特定の終了コードに応じて特定のジョブステータスを設定するプラグインについては誰も新しくありませんでした:( _Execute Shell_ステップを次のコンテンツ:

_bash -c "/path/to/myscript.sh; if [ "\$?" == "$EXPECTED_EXIT_CODE" ]; then exit 0; else exit 1; fi"
_

-_bash -c_の下でスクリプトを実行すると、終了コードをキャッチし、Jenkinsがその終了コードが0と異なる場合に(通常は)ビルドの実行を停止しないようにします。

-_\$?_は、スクリプトの実行後に_$?_として解釈され、その終了コードを表します。

-_$EXPECTED_EXIT_CODE_は、私が期待している終了コードを定義するジョブパラメータの1つです。

-ifステートメントは単に次のことを行います:期待される終了コードを取得した場合、ビルドがSUCCESSとマークされるように0で終了します。それ以外の場合は、ビルドがとマークされるように1で終了します。 FAILURE

17
Max
/path/to/myscript.sh || if [ "$?" == "$EXPECTED_EXIT_CODE" ]; then continue; else exit 1; fi

以下に実行する必要がある項目がある場合は、出口0の代わりに続行を使用します。

4
Bruce Wayne

Text-Finder Pluginで処理できます:

  • 次のように、終了しようとしている終了コードをスクリプトに出力させます。
    Failed on XXX - Exiting with RC 2

  • Text-Finder Pluginを使用してそのエラーメッセージをキャッチし、ビルドを「失敗」または「不安定」としてマークします。
    たとえば、RC 2、3、および4は、ビルドを「不安定」としてマークする必要があると判断した場合、テキストを探しますこのパターンでは:
    Exiting with RC [2-4]
3
Gonen

シェルスクリプトのラッパーを作成します。そのラッパーにテストを実行させてから、必要な基準に従ってresturn値を設定します。

1
Bryan Oakley

私はそれをこのようにします:

set +e
./myscript.sh
rc="$?"
set -e
if [ "$rc" == "$EXPECTED_CODE_1" ]; then
    #...actions 1 (if required)
    exit 0
Elif [ "$rc" == "$EXPECTED_CODE_2" ]; then
    #...actions 2 (if required)
    exit 0
else
    #...actions else (if required)
    exit "$rc"
fi
echo "End of script" #Should never happen, just to indicate there's nothing further

ここで+eは、スクリプトの実行中にくしゃみが発生するとデフォルトのJenkinsの動作でFAILUREが報告されるのを回避するためのものです。次に、-eで戻ります。

必要に応じて終了コードを処理できるようにしてください。そうしないと、返されたコードで最終的に失敗します。

1
RAM237
robocopy "srcDir" "destDir" /"copyOption" if %ERRORLEVEL% LEQ 2 exit 0

Robocopy終了コードが2以下の場合、正常に終了します。

Robocopy終了コード:

0×00   0       No errors occurred, and no copying was done.
               The source and destination directory trees are completely synchronized. 

0×01   1       One or more files were copied successfully (that is, new files have arrived).

0×02   2       Some Extra files or directories were detected. No files were copied
               Examine the output log for details. 

0×04   4       Some Mismatched files or directories were detected.
               Examine the output log. Housekeeping might be required.

0×08   8       Some files or directories could not be copied
               (copy errors occurred and the retry limit was exceeded).
               Check these errors further.

0×10  16       Serious error. Robocopy did not copy any files.
               Either a usage error or an error due to insufficient access privileges
               on the source or destination directories.
0
Ankit Patel