Git、codebuild、elastic beanstalkを使用してCI/CDパイプラインを構築しています。
テストケースの構文エラーが原因でビルドが失敗するコードビルドの実行中に、コードビルドが次の段階に進むのを確認し、最終的に成果物を生成します。
私の理解では、ビルドが失敗した場合、実行を停止する必要がありました。これは正しい動作ですか?
以下のbuildspecを参照してください。
version: 0.2
phases:
install:
commands:
- echo Installing package.json..
- npm install
- echo Installing Mocha...
- npm install -g mocha
pre_build:
commands:
- echo Installing source NPM placeholder dependencies...
build:
commands:
- echo Build started on `date`
- echo Compiling the Node.js code
- mocha modules/**/tests/*.js
post_build:
commands:
- echo Build completed on `date`
artifacts:
files:
- modules/*
- node_modules/*
- package.json
- config/*
- server.js
CodeBuildは、終了コードによってビルドの失敗を検出します。失敗した場合、テスト実行がゼロ以外の終了コードを返すことを確認する必要があります。
POST_BUILD
は、BUILD
も実行されている限り常に実行されます (BUILD
の成功または失敗に関係なく)UPLOAD_ARTIFACTS
についても同じことが言えます。 。これは、デバッグ情報/アーティファクトを取得できるようにするためです。
BUILD
の成功または失敗に応じてPOST_BUILD
で異なることをしたい場合は、設定されている 組み込み環境変数CODEBUILD_BUILD_SUCCEEDING
をテストできます。 BUILD
が成功した場合は1
に、失敗した場合は0
に。
CodeBuildは、環境変数CODEBUILD_BUILD_SUCCEEDINGを使用して、ビルドプロセスが正常に実行されているように見えるかどうかを示します。
私が今見つけた最良の方法は、インストールセクションで小さなスクリプトを作成し、常にこれを次のように使用することです:
phases:
install:
commands:
- echo '#!/bin/bash' > /usr/local/bin/ok; echo 'if [[ "$CODEBUILD_BUILD_SUCCEEDING" == "0" ]]; then exit 1; else exit 0; fi' >> /usr/local/bin/ok; chmod +x /usr/local/bin/ok
post_build:
commands:
- ok && echo Build completed on `date`
Post_buildステージが実行され、成果物が生成されます。 post_buildは、必要に応じてビルド環境を適切にシャットダウンし、ビルドが失敗した場合でも成果物が役立つ場合があります。例えば。追加のログ、中間ファイルなど.
ビルドの結果にとらわれないコマンドに対してのみpost_buildを使用し、ビルド環境を適切に初期化解除することをお勧めします。それ以外の場合は、そのステップを除外できます。