ステップはステップの中で実行されたコマンドのexitコードとシェルをどのように設定したかによって失敗または成功します。 ステップの出力でCircleCIがシェルをどのように設定しているかを見ることができます。
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
コメント
記事コメントは受け付けていません。