ステップが失敗するが、ジョブは成功する

ステップはステップの中で実行されたコマンドのexitコードとシェルをどのように設定したかによって失敗または成功します。 ステップの出力でCircleCIがシェルをどのように設定しているかを見ることができます。

mceclip0.png

CircleCIでは、bash を -eo pipefail オプションで実行しています。 -e はエラーがあったらすぐに終了し、失敗させるためのオプションです。 複数のコマンドを「|」で繋げて実行している場合は、通常、最後のコマンドのエラーだけが適用されます。 -o pipefail オプションは「|」で繋いでいる複数のコマンドのどこかにエラーが起きたらそれを適用させるためのものです。

スクリプトの中でコマンドをを実行すると新しいシェルを立ち上げるため、これらの設定が上書きされます。 もしくは、間違ったエラーコードを返し、失敗するはずだったにも関わらず成功するプログラムもあります。 テストをマルチラインコマンドで実行し、それぞれのコマンドが違うシェルで実行されるときこちらの問題がよく起きます。 シェルの設定をスクリプトの上に明示的に宣言するか、config.ymlに直接追加することができます。 よって、ジョブ結果の信頼性を高めることができます。

例:

- run:
name: run tests
command: |
source venv/bin/activate
python manage.py test

この場合、コマンドの一番上に set -eを追加します。 そうすることで、ビルドが失敗すべきときは、エラーが抑制されることなくビルドが失敗します。

- run:
name: run tests
command: |
set -e
source venv/bin/activate
python manage.py test
この記事は役に立ちましたか?
64人中12人がこの記事が役に立ったと言っています

コメント

0件のコメント

記事コメントは受け付けていません。