Jenkinsのシェルスクリプトではデフォルトで0以外の終了コードが返った場合即終了する。
でも、diffコマンドとかgrepコマンドで終了コード判定したい、という方法を書いてみる。
(grepの終了コードは 0:一致有り、1:一致無し、2:エラー
diffの終了コードは 0:違いなし、1:違いあり、2:エラー)
全体的に終了コードを判定しない方法
方法はJenkinsのシェルの実行について - Qiita参照
最終行以外のコマンドの終了コードが判定されなくなるため、エラーチェックをしようと各コマンド毎に判定を行う必要がある。
スクリプトの追加や終了でついつい終了コード判定してるつもりになって書いたりしてエラーになってもスルーする場合があるため以下の方法の方が良いかも。
一部の終了コードを判定する方法
以下の例のようにして終了コードを変数にしまう。
grep moge test.txt || RETURN_CODE=$?
case "$RETURN_CODE" in
"" ) echo "found" ;;
"1" ) echo "not found" ;;
* )
echo "Error"
exit $RETURN_CODE ;;
esac
終了コードが0の場合はRETURN_CODE=$?が実行されずにRETURN_CODEが空文字になることに注意。
RETURN_CODEに0を入れたい場合はちょっと冗長だけどこんな感じでいける(case文で[0-1]みたいな判定するような場合に楽かも)。
grep moge test.txt && RETURN_CODE=0 || RETURN_CODE=$?
case "$RETURN_CODE" in
# [!0-1] ) exit $RETURN_CODE ;; とするとうまくいかないのは[!0-1]が0-1でない1文字の文字列を指すからなんですね。
[0-1] ) echo "Done" ;;
* ) exit $RETURN_CODE ;;
esac