くりにっき

フルスタックキュアエンジニアです

Jenkinsで使うシェルスクリプトは-xeつけた方がよかった

忙しい人のためのまとめ

f:id:sue445:20140523142631p:plain

で指定するシェルスクリプトには

#!/bin/bash -xe

#!/bin/sh -xe

つけるべき

経緯

Jenkins周りで調べることがあってたまたま下記のエントリを発見

Jenkinsのシェルの実行について - Qiita

シェルの途中でこけても処理が続行されるため

run()
{
  command=$1
  echo "$command"
 
  eval $command
 
  # if error code returned, exit this script with error code
  RET=$?
  if [ $RET -ne 0 ]; then
    exit $RET
  fi
}

のようなラッパ経由でコマンド実行してたのですがそれが不要だったという俺的衝撃事実!!! *1

検証

test1.sh(-xe つけてないスクリプト

#!/bin/bash

ls unknown_path

echo "finish"
$ ./test1.sh
ls: unknown_path: No such file or directory
finish

$ echo $?
0

途中でエラー起こっても処理が続行して最後の echo が成功してるのでステータスコード0が返却

test2.sh(-xeつけたスクリプト

#!/bin/bash -xe

ls unknown_path

echo "finish"
$ ./test2.sh
+ ls unknown_path
ls: unknown_path: No such file or directory

$ echo $?
1

エラーが起きたらそこで中断されてステータスコードも非0が返却