34
26

More than 5 years have passed since last update.

Jenkinsのシェルスクリプトで0以外の終了コードを判定する方法

Last updated at Posted at 2014-06-17

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
34
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
26