Execute Shell
ビルドステップを実行してスクリプトを実行し、そのスクリプトが0
を返すと、Jenkins
はSUCCESS
としてビルドにフラグを立て、それ以外の場合はFAILURE
は予想されるデフォルトの動作であり、0
はエラーがないことを意味し、その他の値はエラーを表します。
戻り値が0
以外の特定の値と一致する場合にのみ、ビルドをSUCCESS
としてマークする方法はありますか(例:1
、2
、3
...)?
PS:なぜ私がそれを探しているのか不思議に思っている場合は、さまざまな要因に応じて異なる終了値を返すようにスクリプトが記述されているため、Jenkins自体の単体テストを実行できます。 、したがって、特定の設定ミスに応じて特定の値を期待し、Jenkins統合全体がそれらを認識できるようにします。
さて、私は_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
。
/path/to/myscript.sh || if [ "$?" == "$EXPECTED_EXIT_CODE" ]; then continue; else exit 1; fi
以下に実行する必要がある項目がある場合は、出口0の代わりに続行を使用します。
Text-Finder Pluginで処理できます:
Failed on XXX - Exiting with RC 2
Exiting with RC [2-4]
。シェルスクリプトのラッパーを作成します。そのラッパーにテストを実行させてから、必要な基準に従ってresturn値を設定します。
私はそれをこのようにします:
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
で戻ります。
必要に応じて終了コードを処理できるようにしてください。そうしないと、返されたコードで最終的に失敗します。
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.