翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
CodeBuild のビルド仕様に関するリファレンス
このトピックでは、ビルド仕様 (buildspec) ファイルに関する重要なリファレンス情報を提供します。ビルド環境は、CodeBuild がビルドを実行するために使用するオペレーティングシステム、プログラミング言語ランタイム、およびツールの組み合わせを表します。buildspec をソースコードの一部として含めることも、ビルドプロジェクトの作成時に buildspec を定義することもできます。ビルド仕様の仕組みについては、「CodeBuild の仕組み」を参照してください。
トピック
buildspec ファイル名とストレージの場所
buildspec をソースコードの一部として含める場合、デフォルトの buildspec ファイルの名前は buildspec.yml で、ソースディレクトリのルートに配置する必要があります。
デフォルトの buildspec ファイルの名前と場所を変更することができます。たとえば、以下のことが可能です。
-
同じリポジトリ内の異なるビルドに、
buildspec_debug.ymlやbuildspec_release.ymlなどの異なる buildspec ファイルを使用する。 -
config/buildspec.ymlなど、ソースディレクトリのルート以外の場所や、S3 バケットに buildspec ファイルを保存する。S3 バケットは、ビルドプロジェクトと同じ AWS リージョンに存在する必要があります。ARN を使用して buildspec ファイルを指定します(例:arn:aws:s3:::)。<my-codebuild-sample2>/buildspec.yml
buildspec ファイルの名前に関係なく、ビルドプロジェクトには 1 つの buildspec しか指定できません。
デフォルトの buildspec ファイルの名前、場所、またはその両方をオーバーライドするには、次のいずれかを実行します。
-
または
update-projectコマンドを実行し AWS CLIcreate-project、buildspec値を、組み込み環境変数 の値に対する代替 buildspec ファイルへのパスに設定しますCODEBUILD_SRC_DIR。 AWS SDKs のcreate projectオペレーションと同等の操作を行うこともできます。詳細については、「ビルドプロジェクトの作成」または「ビルドプロジェクト設定を変更」を参照してください。 -
コマンドを実行し AWS CLI
start-build、buildspecOverride値を、組み込み環境変数 の値に対する代替 buildspec ファイルへのパスに設定しますCODEBUILD_SRC_DIR。 AWS SDKs のstart buildオペレーションと同等の操作を行うこともできます。詳細については、「ビルドを手動で実行」を参照してください。 -
AWS CloudFormation テンプレートで、 タイプのリソース
SourceのBuildSpecプロパティAWS::CodeBuild::Projectを、組み込み環境変数 の値に対する代替 buildspec ファイルのパスに設定しますCODEBUILD_SRC_DIR。詳細については、AWS CloudFormation ユーザーガイドのAWS CodeBuild プロジェクトソースの BuildSpec プロパティを参照してください。
buildspec の構文
buildspec ファイルは YAML
YAML でサポートされていない文字または文字列がコマンドに含まれている場合は、そのコマンドを引用符 ("") で囲む必要があります。次のコマンドが引用符で囲まれているのは、YAML ではコロン (:) に続けてスペースを使用できないためです。コマンド内の引用符はエスケープ (\") されます。
"export PACKAGE_NAME=$(cat package.json | grep name | head -1 | awk -F: '{ print $2 }' | sed 's/[\",]//g')"
buildspec の構文は次のとおりです。
version: 0.2 run-as:Linux-user-nameenv: shell:shell-tagvariables:key: "value"key: "value" parameter-store:key: "value"key: "value" exported-variables: -variable-variablesecrets-manager:key:secret-id:json-key:version-stage:version-idgit-credential-helper: no | yes proxy: upload-artifacts: no | yes logs: no | yes batch: fast-fail: false | true # build-list: # build-matrix: # build-graph: # build-fanout: phases: install: run-as:Linux-user-nameon-failure: ABORT | CONTINUE | RETRY | RETRY-count| RETRY-regex| RETRY-count-regexruntime-versions:runtime:versionruntime:versioncommands: -command-commandfinally: -command-commandpre_build: run-as:Linux-user-nameon-failure: ABORT | CONTINUE | RETRY | RETRY-count| RETRY-regex| RETRY-count-regexcommands: -command-commandfinally: -command-commandbuild: run-as:Linux-user-nameon-failure: ABORT | CONTINUE | RETRY | RETRY-count| RETRY-regex| RETRY-count-regexcommands: -command-commandfinally: -command-commandpost_build: run-as:Linux-user-nameon-failure: ABORT | CONTINUE | RETRY | RETRY-count| RETRY-regex| RETRY-count-regexcommands: -command-commandfinally: -command-commandreports:report-group-name-or-arn: files: -location-locationbase-directory:locationdiscard-paths: no | yes file-format:report-formatartifacts: files: -location-locationname:artifact-namediscard-paths: no | yes base-directory:locationexclude-paths:excluded pathsenable-symlinks: no | yes s3-prefix:prefixsecondary-artifacts:artifactIdentifier: files: -location-locationname:secondary-artifact-namediscard-paths: no | yes base-directory:locationartifactIdentifier: files: -location-locationdiscard-paths: no | yes base-directory:locationcache: key:keyfallback-keys: -fallback-key-fallback-keyaction: restore | save paths: -path-path
buildspec には、次のものが含まれています。
version
必要なマッピング。buildspec のバージョンを表します。0.2 を使用することをお勧めします。
注記
バージョン 0.1 も引き続きサポートされていますが、可能な場合はバージョン 0.2 を使用することをお勧めします。詳細については、「buildspec のバージョン」を参照してください。
run-as
オプションのシーケンス。Linux ユーザーのみが使用できます。この buildspec ファイルでコマンドを実行する Linux ユーザーを指定します。run-as は、指定したユーザーに読み取りおよび実行の許可を付与します。buildspec ファイルの上で run-as を指定すると、すべてのコマンドにグローバルに適用されます。すべての buildspec ファイルコマンドのユーザーを指定しない場合、phases ブロックのいずれかで run-as を使用することによりフェーズでいずれかのコマンドを指定できます。run-as を指定しない場合、すべてのコマンドがルートユーザーとして実行されます。
env
オプションのシーケンス。1 つ以上のカスタム環境変数の情報を表します。
注記
機密情報を保護するために、CodeBuild ログでは次の情報が非表示になっています。
-
AWS アクセスキー IDs。詳細については、AWS Identity and Access Management ユーザーガイドの IAM ユーザーのアクセスキーの管理を参照してください。
-
パラメータストアを使用して指定された文字列。詳細については、「Amazon EC2 Systems Manager ユーザーガイド」の「Systems Manager パラメータストア」および「Systems Manager パラメータストアコンソールのチュートリアル」を参照してください。
-
を使用して指定された文字列 AWS Secrets Manager。詳細については、「キー管理」を参照してください。
- env/shell
-
オプションのシーケンス。Linux または Windows オペレーティングシステムでサポートされるシェルを指定します。
Linux オペレーティングシステムで、サポートされているシェルタグは次のとおりです。
-
bash -
/bin/sh
Windows オペレーティングシステムで、サポートされているシェルタグは次のとおりです。
-
powershell.exe -
cmd.exe
-
- env/variables
-
envを指定し、プレーンテキストでカスタム環境変数を定義する場合は必須です。キーと値のスカラーのマッピングを含み、各マッピングはプレーンテキストで 1 つのカスタム環境変数を表します。キーは、カスタム環境変数の名前で、値はその変数の値です。重要
機密の値は環境変数に保存しないことを強くお勧めします。環境変数は、CodeBuild コンソールや AWS CLIなどのツールを使用してプレーンテキストで表示できます。機密情報については、このセクションの後半で説明するように、
parameter-storeマッピングまたはsecrets-managerマッピングを代わりに使用することをお勧めします。既存の環境変数は、設定した環境変数によって置き換えられます。たとえば、Docker イメージに
my_valueの値を持つMY_VARという名前の環境変数が既に含まれていて、other_valueの値を持つMY_VARという名前の環境変数を設定した場合、my_valueがother_valueに置き換えられます。同様に、Docker イメージに/usr/local/sbin:/usr/local/binの値を持つPATHという名前の環境変数が既に含まれていて、$PATH:/usr/share/ant/binの値を持つPATHという名前の環境変数を設定した場合、/usr/local/sbin:/usr/local/binはリテラル値$PATH:/usr/share/ant/binに置き換えられます。CODEBUILD_で始まる名前の環境変数は設定しないでください。このプレフィックスは内部使用のために予約されています。同じ名前の環境変数が複数の場所で定義されている場合は、その値は次のように決定されます。
-
ビルド開始オペレーション呼び出しの値が最も優先順位が高くなります。ビルドの作成時に環境変数を追加または上書きできます。詳細については、「AWS CodeBuild ビルドを手動で実行する」を参照してください。
-
ビルドプロジェクト定義の値が次に優先されます。プロジェクトを作成または編集するときに、プロジェクトレベルで環境変数を追加できます。詳細については、「でビルドプロジェクトを作成する AWS CodeBuild」および「でビルドプロジェクト設定を変更する AWS CodeBuild」を参照してください。
-
ビルド仕様宣言の値の優先順位が最も低くなります。
-
- env/parameter-store
-
envが指定されていて、Amazon EC2 Systems Manager パラメータストアに保存されているカスタム環境変数を取得する場合は必須です。キーと値のマッピングを含み、各マッピングは単一のカスタム環境変数を表し、Amazon EC2 Systems Manager パラメータストアに保存されます。キーは、後でビルドコマンドで使用するこのカスタム環境変数を参照する名前で、値は Amazon EC2 Systems Manager パラメータストアに保存されているカスタム環境変数の名前です。重要な値を保存するには、Amazon EC2 Systems Manager ユーザーガイドの「Systems Manager パラメータストア」および「チュートリアル: String パラメータの作成とテスト (コンソール)」を参照してください。重要
Amazon EC2 Systems Manager パラメータストアに保存されているカスタム環境変数を取得することを CodeBuild に許可するには、CodeBuild サービスロールに
ssm:GetParametersアクションを追加する必要があります。詳細については、「CodeBuild が他の AWS のサービスとやり取りすることを許可」を参照してください。Amazon EC2 Systems Manager パラメータストアから取得する環境変数は、既存の環境変数を置き換えます。たとえば、Docker イメージに
MY_VARという名前で値がmy_valueの環境変数がすでに含まれていて、MY_VARという名前で値がother_valueの環境変数を取得した場合、my_valueはother_valueに置き換えられます。同様に、Docker イメージに/usr/local/sbin:/usr/local/binという名前で値がPATHの環境変数がすでに含まれていて、$PATH:/usr/share/ant/binという名前で値がPATHの環境変数を取得した場合、/usr/local/sbin:/usr/local/binはリテラル値$PATH:/usr/share/ant/binに置き換えられます。CODEBUILD_で始まる名前の環境変数は保存しないでください。このプレフィックスは内部使用のために予約されています。同じ名前の環境変数が複数の場所で定義されている場合は、その値は次のように決定されます。
-
ビルド開始オペレーション呼び出しの値が最も優先順位が高くなります。ビルドの作成時に環境変数を追加または上書きできます。詳細については、「AWS CodeBuild ビルドを手動で実行する」を参照してください。
-
ビルドプロジェクト定義の値が次に優先されます。プロジェクトを作成または編集するときに、プロジェクトレベルで環境変数を追加できます。詳細については、「でビルドプロジェクトを作成する AWS CodeBuild」および「でビルドプロジェクト設定を変更する AWS CodeBuild」を参照してください。
-
ビルド仕様宣言の値の優先順位が最も低くなります。
-
- env/secrets-manager
-
に保存されているカスタム環境変数を取得する場合に必要です AWS Secrets Manager。次のパターンを使用して、Secrets Manager
reference-keyを指定します。:<key><secret-id>:<json-key>:<version-stage>:<version-id><key>-
(必須) ローカル環境変数の名前。この名前を使用して、ビルド中に変数にアクセスします。
<secret-id>-
(必須) シークレットの一意の識別子として機能する名前または Amazon リソースネーム (ARN) です。 AWS アカウントのシークレットにアクセスするには、シークレット名を指定します。別の AWS アカウントのシークレットにアクセスするには、シークレット ARN を指定します。
<json-key>-
(オプション) 値を取得する Secrets Manager のキーと値のペアのキー名を指定します。
json-keyを指定しない場合、CodeBuild はシークレットテキスト全体を取得します。 <version-stage>-
(オプション) バージョンに添付されているステージングラベルによって取得するシークレットのバージョンを指定します。ステージングラベルは、ローテーション処理中にさまざまなバージョンを追跡するために使用されます。
version-stageを使用する場合は、version-idを指定しないでください。バージョンステージもバージョン ID も指定しない場合、デフォルトではAWSCURRENTのバージョンステージ値でバージョンが取得されます。 <version-id>-
(オプション) 使用したいシークレットのバージョンの固有 ID を指定します。
version-idを指定した場合は、version-stageを指定しないでください。バージョンステージもバージョン ID も指定しない場合、デフォルトではAWSCURRENTのバージョンステージ値でバージョンが取得されます。
次の例で、
TestSecretは Secrets Manager に保存されているキーと値のペアの名前です。TestSecretのキーはMY_SECRET_VARです。ビルド中に変数にアクセスするには、名前「LOCAL_SECRET_VAR」を使用します。env: secrets-manager: LOCAL_SECRET_VAR: "TestSecret:MY_SECRET_VAR"詳細については、AWS Secrets Managerユーザーガイドの「AWS Secrets Manager とは?」を参照してください。
- env/exported-variables
-
オプションのマッピング。エクスポートする環境変数をリストするために使用します。エクスポートする各変数の名前を、
exported-variablesの別の行で指定します。エクスポートする変数は、ビルド中にコンテナで使用できる必要があります。エクスポートする変数は、環境変数にすることができます。エクスポートされた環境変数は、 と組み合わせて使用 AWS CodePipeline して、現在のビルドステージからパイプラインの後続のステージに環境変数をエクスポートします。詳細については、AWS CodePipeline ユーザーガイドの変数の操作を参照してください。
ビルド中、変数の値は、
installフェーズから開始して使用できます。これは、installフェーズの開始とpost_buildフェーズの終了の間に更新することができます。post_buildフェーズが終了すると、エクスポートされた変数の値は変更できません。注記
以下はエクスポートできません:
-
ビルドプロジェクトで指定された Amazon EC2 Systems Manager Parameter Store シークレット
-
ビルドプロジェクトで指定された Secrets Manager のシークレット
-
AWS_で始まる環境変数。
-
- env/git-credential-helper
-
オプションのマッピング。CodeBuild が Git 認証情報ヘルパーを使用して Git 認証情報を提供するかどうかを示します。使用する場合は
yesです。それ以外の場合は、noまたは指定なしです。詳細については、Git ウェブサイトの「gitcredentials」を参照してください。 注記
git-credential-helperは、パブリック Git リポジトリの Webhook によってトリガーされるビルドではサポートされません。
proxy
オプションのシーケンス。明示的なプロキシサーバーでビルドを実行する場合、設定を表すために使用されます。詳細については、「 明示的なプロキシサーバーでの CodeBuild の実行」を参照してください。
- proxy/upload-artifacts
-
オプションのマッピング。明示的なプロキシサーバーのビルドでアーティファクトをアップロードする場合は、
yesに設定します。デフォルトはnoです。 - proxy/logs
-
オプションのマッピング。明示的なプロキシサーバーのビルドで、CloudWatch ログを作成するには、
yesに設定します。デフォルトはnoです。
phases
必要なシーケンス。ビルドの各段階で CodeBuild が実行するコマンドを表します。
注記
buildspec バージョン 0.1 では、CodeBuild はビルド環境のデフォルトシェルの各インスタンスで各コマンドを実行します。つまり、各コマンドは他のすべてのコマンドとは独立して実行されます。したがって、デフォルトでは、以前のコマンド (ディレクトリの変更や環境変数の設定など) の状態に依存する単一のコマンドを実行することはできません。この制限を回避するには、バージョン 0.2 を使用することをお勧めします。これにより、問題が解決されます。buildspec バージョン 0.1 を使用する必要がある場合は、「ビルド環境のシェルとコマンド」のアプローチをお勧めします。
- phases/*/run-as
-
オプションのシーケンス。ビルドフェーズで使用し、そのコマンドを実行する Linux ユーザーを指定します。buildspec ファイルの上ですべてのコマンドに対して
run-asもグローバルに指定されている場合、フェーズレベルのユーザーが優先されます。例えば、run-asがグローバルに User-1 を指定し、run-asステートメントがinstallフェーズでのみ User-2 を指定した場合、buildspec ファイル内のすべてのコマンドは User-1 として実行されますが、installフェーズのコマンドは除きます (これらのコマンドは User-2 として実行されます)。 - phases/*/on-failure
-
オプションのシーケンス。フェーズ中に障害が発生した場合に実行するアクションを指定します。これには、次のいずれかの値を指定できます。
-
ABORT- ビルドを中止します。 -
CONTINUE- 次のフェーズに進みます。 -
RETRY- 正規表現 に一致するエラーメッセージを使用して、ビルドを最大 3 回再試行します.*。 -
RETRY-- 正規表現 に一致するエラーメッセージでcountカウントで表されるように、指定された回数だけビルドを再試行します.*。カウントは 0~100 の間である必要があります。たとえば、有効な値にはRETRY-4と が含まれますRETRY-8。 -
RETRY-- ビルドを最大 3 回再試行し、regex正規表現を使用して、指定されたエラーメッセージに一致する正規表現を含めます。たとえば、有効な値にはRetry-.*Error: Unable to connect to database.*と が含まれますRETRY-invalid+。 -
RETRY--count-regexカウントで表される、指定された回数だけビルドを再試行します。カウントは 0~100 の間である必要があります。正規表現を使用して、エラーメッセージに一致する正規表現を含めることもできます。たとえば、有効な値にはRetry-3-.*connection timed out.*と が含まれますRETRY-8-invalid+。
このプロパティを指定しない場合は、ビルドフェーズの移行 に示すように、失敗処理が遷移フェーズに続きます。
重要
Lambda コンピューティングまたはリザーブドキャパシティを使用する場合、
on-failure属性はサポートされていません。この属性は、CodeBuild が提供する EC2 コンピューティングイメージでのみ機能します。 -
- phases/*/finally
-
オプションのブロック。
finallyブロックに指定したコマンドは、commandsブロックのコマンドの実行後に実行されます。finallyブロックに指定したコマンドは、commandsブロックのコマンドが失敗した場合でも実行されます。例えば、commandsブロック内に 3 つのコマンドがあり、最初のコマンドが失敗した場合、CodeBuild は残りの 2 つのコマンドをスキップしてfinallyブロック内のコマンドを実行します。commandsブロックとfinallyブロックのすべてのコマンドが正常に実行されると、フェーズは成功します。フェーズのいずれかのコマンドが失敗すると、フェーズは失敗します。
許可されるビルドフェーズ名は次のとおりです。
- phases/install
-
オプションのシーケンス。インストール時に CodeBuild が実行するコマンドがある場合は、そのコマンドを表します。
installフェーズは、ビルド環境でのパッケージのインストールにのみ使用することをお勧めします。たとえば、このフェーズを使用して、Mocha や RSpec などのコードテストフレームワークをインストールすることができます。- phases/install/runtime-versions
-
オプションのシーケンス。ランタイムバージョンは、Ubuntu 標準イメージ 5.0 以降および Amazon Linux 2 標準イメージ 4.0 以降でサポートされています。指定した場合、少なくとも 1 つのランタイムをこのセクションに含める必要があります。ランタイムを指定するには、特定のバージョンを使用するか、メジャーバージョンに
.xを続けて CodeBuild がこのメジャーバージョンと最新マイナーバージョンを使用することを指定するか、latestを指定して最新のメジャーバージョンとマイナーバージョン (ruby: 3.2、nodejs: 18.x、java: latestなど) を使用します。数値または環境変数を使用してランタイムを指定できます。例えば、Amazon Linux 2 標準イメージ 4.0 を使用している場合、次の例は、Java のバージョン 17、Python バージョン 3 の最新マイナーバージョン、および Ruby の環境変数内のバージョンをインストールすることを指定します。詳細については、「CodeBuild に用意されている Docker イメージ」を参照してください。phases: install: runtime-versions: java: corretto8 python: 3.x ruby: "$MY_RUBY_VAR"buildspec ファイルの
runtime-versionsセクションで 1 つ以上のランタイムを指定できます。ランタイムが別のランタイムに依存している場合は、依存しているランタイムを buildspec ファイルで指定することもできます。buildspec ファイルでランタイムを指定しない場合は、CodeBuild により、使用するイメージのデフォルトのランタイムが選択されます。1 つ以上のランタイムを指定すると、CodeBuild により、それらのランタイムのみが使用されます。依存関係のあるランタイムが指定されていない場合、CodeBuild により、依存関係のあるランタイムの選択が試みられます。2 つの指定されたランタイムが競合する場合、ビルドは失敗します。たとえば、
android: 29とjava: openjdk11が矛盾するので、両方が指定されている場合は、ビルドは失敗します。使用できるランタイムの詳細については、「使用可能なランタイム」を参照してください。
注記
runtime-versionsセクションを指定して、Ubuntu 標準イメージ 2.0 以降や Amazon Linux 2 (AL2) 標準イメージ 1.0 以降以外のイメージを使用した場合は、ビルドで「Skipping install of runtimes. Runtime version selection is not supported by this build image」の警告が表示されます。
- phases/install/commands
-
オプションのシーケンス。一連のスカラーが含まれ、各スカラーは、インストール中に CodeBuild が実行する単一のコマンドを表します。CodeBuild は、最初から最後まで、各コマンドを一度に 1 つずつ、指定された順序で実行します。
- phases/pre_build
-
オプションのシーケンス。ビルドの前に CodeBuild が実行するコマンドがあれば、それを表します。たとえば、このフェーズを使用して Amazon ECR にサインインするか、npm の依存関係をインストールすることができます。
- phases/pre_build/commands
-
pre_buildが指定されている場合は必須のシーケンスです。一連のスカラーが含まれ、各スカラーは、ビルドの前に CodeBuild が実行する単一のコマンドを表します。CodeBuild は、最初から最後まで、各コマンドを一度に 1 つずつ、指定された順序で実行します。
- phases/build
-
オプションのシーケンス。ビルド中に CodeBuild が実行するコマンドがあれば、それを表します。たとえば、このフェーズを使用して、Mocha、RSpec、または sbt を実行できます。
- phases/build/commands
-
buildが指定されている場合は必須です。一連のスカラーが含まれ、各スカラーは、ビルド中に CodeBuild が実行する単一のコマンドを表します。CodeBuild は、最初から最後まで、各コマンドを一度に 1 つずつ、指定された順序で実行します。
- phases/post_build
-
オプションのシーケンス。ビルドの後に CodeBuild が実行するコマンドがあれば、それを表します。たとえば、Maven を使用してビルドアーティファクトを JAR または WAR ファイルにパッケージ化するか、Docker イメージを Amazon ECR にプッシュすることができます。次に、Amazon SNS を介してビルド通知を送信できます。
- phases/post_build/commands
-
post_buildが指定されている場合は必須です。一連のスカラーが含まれ、各スカラーは、ビルドの後に CodeBuild が実行する単一のコマンドを表します。CodeBuild は、最初から最後まで、各コマンドを一度に 1 つずつ、指定された順序で実行します。
レポート
- report-group-name-or-arn
-
オプションのシーケンス。レポートの送信先のレポートグループを指定します。プロジェクトには、最大 5 つのレポートグループを含めることができます。既存のレポートグループの ARN、または新しいレポートグループの名前を指定します。名前を指定した場合、CodeBuild は、プロジェクト名と
<project-name>-<report-group-name>形式で指定した名前を使用してレポートグループを作成します。レポートグループ名は、$REPORT_GROUP_NAMEなどの buildspec の環境変数を使用して設定することもできます。詳細については、「Report group naming」を参照してください。 - reports/<report-group>/files
-
必要なシーケンス。レポートによって生成されたテスト結果の生データを含む場所を表します。スカラーのシーケンスが含まれます。各スカラーは、元のビルドの場所または
base-directory(設定されている場合) を基準にして、CodeBuild がテストファイルを検索できる個別の場所を表します。場所には次のものが含まれます。-
1 つのファイル (例:
my-test-report-file.json)。 -
サブディレクトリ内の単一のファイル (
やmy-subdirectory/my-test-report-file.jsonなど)。my-parent-subdirectory/my-subdirectory/my-test-report-file.json -
'**/*'はすべてのファイルを再帰的に表します。 -
は、my-subdirectory/*my-subdirectoryという名前のサブディレクトリ内のすべてのファイルを表します。 -
は、my-subdirectory/**/*my-subdirectoryという名前のサブディレクトリから再帰的にすべてのファイルを表します。
-
- reports/<report-group>/file-format
-
オプションのマッピング。レポートファイル形式を表します。指定しない場合は、
JUNITXMLを使用します。この値は大文字と小文字が区別されません。想定される値は次のとおりです。テストレポート
-
CUCUMBERJSON -
Cucumber JSON
-
JUNITXML -
JUnit XML
-
NUNITXML -
NUnit XML
-
NUNIT3XML -
NUnit 3 XML
-
TESTNGXML -
TestNG XML
-
VISUALSTUDIOTRX -
Visual Studio TRX
コードカバレッジレポート
-
CLOVERXML -
クローバー XML
-
COBERTURAXML -
Cobertura XML
-
JACOCOXML -
JaCoCo XML
-
SIMPLECOV -
SimpleCov JSON
注記
CodeBuild は、simplecov-json
ではなく、simplecov によって生成された JSON コードカバレッジレポートを受け入れます。
-
- reports/<report-group>/base-directory
-
オプションのマッピング。CodeBuild が生のテストファイルを見つける場所を決定するために使用する元のビルド場所に対する相対的な 1 つ以上のトップレベルディレクトリを表します。
- reports/<report-group>/discard-paths
-
オプション。レポートファイルのディレクトリを出力でフラット化するかどうかを指定します。これが指定されていない場合、または
noを含む場合、レポートファイルはディレクトリ構造のまま出力されます。このディレクトリにyesが含まれている場合、すべてのテストファイルが同じ出力ディレクトリに配置されます。たとえば、テスト結果へのパスがcom/myapp/mytests/TestResult.xmlである場合、yesを指定すると、このファイルが/TestResult.xmlに配置されます。
artifacts
オプションのシーケンス。CodeBuild がビルド出力を見つけることができる場所に関する情報、CodeBuild が S3 出力バケットへのアップロード用にその出力を準備する方法に関する情報を表します。たとえば、Docker イメージを作成して Amazon ECR にプッシュしている場合、または、ソースコードでユニットテストを実行していてもビルドしていない場合、このシーケンスは必要ありません。
注記
Amazon S3 メタデータには、x-amz-meta-codebuild-buildarn という名前の CodeBuild ヘッダーがあります。このヘッダーには、Amazon S3 にアーティファクトを公開する CodeBuild ビルドの buildArn が含まれています。通知のソーストラッキングを許可し、アーティファクトの生成元であるビルドを参照するには、buildArn を追加します。
- artifacts/files
-
必要なシーケンス。ビルド環境でのビルド出力アーティファクトを含む場所を表します。スカラーのシーケンスが含まれ、各スカラーは、CodeBuild が元のビルドの場所を基準に、あるいは設定されている場合はベースディレクトリを基準にして、ビルド出力アーティファクトを見つけることができる個別の場所を表します。場所には次のものが含まれます。
-
1 つのファイル (例:
my-file.jar)。 -
サブディレクトリ内の単一のファイル (
やmy-subdirectory/my-file.jarなど)。my-parent-subdirectory/my-subdirectory/my-file.jar -
'**/*'はすべてのファイルを再帰的に表します。 -
は、my-subdirectory/*my-subdirectoryという名前のサブディレクトリ内のすべてのファイルを表します。 -
は、my-subdirectory/**/*my-subdirectoryという名前のサブディレクトリから再帰的にすべてのファイルを表します。
ビルド出力アーティファクトの場所を指定すると、CodeBuild はビルド環境で元のビルドの場所を特定できます。ビルドアーティファクトの出力先の場所に、元のビルドの場所へのパスを追加する、または
./などで場所を指定する必要はありません。この場所へのパスを知りたい場合は、ビルド中にecho $CODEBUILD_SRC_DIRなどのコマンドを実行できます。各ビルド環境の場所は多少異なる場合があります。 -
- artifacts/name
-
オプション名。ビルドアーティファクトの名前を指定します。この名前は、次のいずれかに該当する場合に使用されます。
-
CodeBuild API を使用してビルドを作成し、プロジェクトの更新、プロジェクトの作成、またはビルドの開始時に
ProjectArtifactsオブジェクトにoverrideArtifactNameフラグを設定した場合。 -
CodeBuild コンソールを使用してビルドを作成し、buildspec ファイルで名前を指定して、プロジェクトの作成または更新時に [Enable semantic versioning] (セマンティックバージョニングの有効化) を選択した場合。詳細については、「ビルドプロジェクトの作成 (コンソール)」を参照してください。
ビルド時に計算される buildspec ファイルの名前を指定できます。buildspec ファイルで指定された名前は、Shell コマンド言語を使用します。たとえば、アーティファクト名に日付と時刻を追加して常に一意にできます。アーティファクト名を一意にすると、アーティファクトが上書きされるのを防ぐことができます。詳細については、「Shell コマンド言語
」を参照してください。 -
これは、アーティファクトが作成された日付が付加されたアーティファクト名の例です。
version: 0.2 phases: build: commands: - rspec HelloWorld_spec.rb artifacts: files: - '**/*' name: myname-$(date +%Y-%m-%d) -
この例は、CodeBuild 環境変数を使用するアーティファクト名の例です。詳細については、「ビルド環境の環境変数」を参照してください。
version: 0.2 phases: build: commands: - rspec HelloWorld_spec.rb artifacts: files: - '**/*' name: myname-$AWS_REGION -
これは、アーティファクトの作成日が付加された CodeBuild 環境変数を使用するアーティファクト名の例です。
version: 0.2 phases: build: commands: - rspec HelloWorld_spec.rb artifacts: files: - '**/*' name: $AWS_REGION-$(date +%Y-%m-%d)
名前にパス情報を追加して、名前のアーチファクトが名前のパスに基づいてディレクトリに配置されるようにできます。この例では、ビルドアーティファクトは、
builds/<build number>/my-artifactsの下に配置されます。version: 0.2 phases: build: commands: - rspec HelloWorld_spec.rb artifacts: files: - '**/*' name: builds/$CODEBUILD_BUILD_NUMBER/my-artifacts -
- artifacts/discard-paths
-
オプション。ビルドアーティファクトのディレクトリが出力でフラット化されるかどうかを指定します。これが指定されていない場合、または
noを含む場合は、ディレクトリ構造はそのままで、ビルドアーティファクトが出力されます。このディレクトリにyesが含まれる場合、すべてのビルドアーティファクトが同じ出力ディレクトリに配置されます。たとえば、ビルド出力アーティファクト内のファイルへのパスがcom/mycompany/app/HelloWorld.javaである場合、yesを指定すると、このファイルが/HelloWorld.javaに配置されます。 - artifacts/base-directory
-
オプションのマッピング。CodeBuild がビルド出力アーティファクトに含めるファイルとサブディレクトリを決定するために使用する、元のビルドの場所を基準とした、1 つ以上の最上位ディレクトリを表します。有効な値を次に示します。
-
単一の最上位ディレクトリ (例:
my-directory)。 -
'my-directory*'my-directoryで始まる名前を持つすべての最上位ディレクトリを表します。
一致する最上位ディレクトリはビルド出力アーティファクトに含まれず、ファイルとサブディレクトリにのみ含まれます。
filesおよびdiscard-pathsを使用して、どのファイルとサブディレクトリを含めるかをさらに制限できます。たとえば、以下のようなディレクトリ構造があります。. ├── my-build-1 │ └── my-file-1.txt └── my-build-2 ├── my-file-2.txt └── my-subdirectory └── my-file-3.txtまた、次のような
artifactsシーケンスがあります。artifacts: files: - '*/my-file-3.txt' base-directory: my-build-2次のサブディレクトリとファイルが、ビルド出力アーティファクトに含まれます。
. └── my-subdirectory └── my-file-3.txtさらに、次のような
artifactsシーケンスがあります。artifacts: files: - '**/*' base-directory: 'my-build*' discard-paths: yes次のファイルが、ビルド出力アーティファクトに含まれます。
. ├── my-file-1.txt ├── my-file-2.txt └── my-file-3.txt -
- artifacts/exclude-paths
-
オプションのマッピング。
base-directoryに相対的な 1 つまたは複数のパスを表します。CodeBuild はビルドのアーティファクトから、このパスを除外します。アスタリスク (*) 記号は、フォルダの境界を超えない、0 文字以上の名前の要素と一致します。二重アスタリスク (**) は、すべてのディレクトリをまたいで、0 文字以上の名前の要素と一致します。除外パスの例は以下のとおりです。
-
すべてのディレクトリからファイルを除外する場合:
"**/file-name/**/*" -
すべてのドットフォルダを除外する場合:
"**/.*/**/*" -
すべてのドットファイルを除外する場合:
"**/.*"
-
- artifacts/enable-symlinks
-
オプション。出力タイプが
ZIPの場合、内部シンボリックリンクを ZIP ファイルに保持するかどうかを指定します。これにyesが含まれる場合、ソース内のすべての内部シンボリックリンクがアーティファクト ZIP ファイルに保持されます。 - artifacts/s3-prefix
-
オプション。アーティファクトを Amazon S3 バケットに出力し、名前空間タイプが
BUILD_IDの場合に使用するプレフィックスを指定します。使用した場合、バケット内の出力パスは「<s3-prefix>/<build-id>/<name>.zip」となります。 - artifacts/secondary-artifacts
-
オプションのシーケンス。アーティファクト識別子とアーティファクト定義との間のマッピングとしての 1 つ以上のアーティファクト定義を表します。このブロック内の各アーティファクト識別子は、プロジェクトの
secondaryArtifacts属性で定義されたアーティファクトと一致する必要があります。各個別の定義は、上記のartifactsブロックと同じ構文を持っています。注記
「artifacts/files」シーケンスは、セカンダリアーティファクトしか定義されていない場合でも、常に必要です。
たとえば、プロジェクトに次の構造があるとします。
{ "name": "sample-project", "secondaryArtifacts": [ { "type": "S3", "location": "<output-bucket1>", "artifactIdentifier": "artifact1", "name": "secondary-artifact-name-1" }, { "type": "S3", "location": "<output-bucket2>", "artifactIdentifier": "artifact2", "name": "secondary-artifact-name-2" } ] }次に、buildspec は次のようになります。
version: 0.2 phases: build: commands: - echo Building... artifacts: files: - '**/*' secondary-artifacts: artifact1: files: - directory/file1 name: secondary-artifact-name-1 artifact2: files: - directory/file2 name: secondary-artifact-name-2
cache
オプションのシーケンス。CodeBuild が S3 キャッシュバケットへのキャッシュのアップロード用にファイルを準備できる場所に関する情報を表します。プロジェクトのキャッシュタイプが No Cache の場合、このシーケンスは不要です。
- キャッシュ/キー
-
オプションのシーケンス。キャッシュを検索または復元するときに使用されるプライマリキーを表します。CodeBuild はプライマリキーと完全に一致します。
キーの例を次に示します。
key: npm-key-$(codebuild-hash-files package-lock.json) } - キャッシュ/フォールバックキー
-
オプションのシーケンス。プライマリキーを使用してキャッシュが見つからない場合に順次使用されるフォールバックキーのリストを表します。最大 5 つのフォールバックキーがサポートされ、それぞれがプレフィックス検索を使用して照合されます。キーが指定されていない場合、このシーケンスは無視されます。
フォールバックキーの例を次に示します。
fallback-keys: - npm-key-$(codebuild-hash-files package-lock.json) } - npm-key- - npm- - キャッシュ/アクション
-
オプションのシーケンス。キャッシュで実行するアクションを指定します。有効な値を次に示します。
-
restore更新を保存せずにキャッシュのみを復元します。 -
save以前のバージョンを復元せずにキャッシュのみを保存します。
値が指定されていない場合、CodeBuild はデフォルトで復元と保存の両方を実行します。
-
- cache/paths
-
必要なシーケンス。キャッシュの場所を表します。スカラーのシーケンスが含まれ、各スカラーは、CodeBuild が元のビルドの場所を基準に、あるいは設定されている場合はベースディレクトリを基準にして、ビルド出力アーティファクトを見つけることができる個別の場所を表します。場所には次のものが含まれます。
-
1 つのファイル (例:
my-file.jar)。 -
サブディレクトリ内の単一のファイル (
やmy-subdirectory/my-file.jarなど)。my-parent-subdirectory/my-subdirectory/my-file.jar -
'**/*'はすべてのファイルを再帰的に表します。 -
は、my-subdirectory/*my-subdirectoryという名前のサブディレクトリ内のすべてのファイルを表します。 -
は、my-subdirectory/**/*my-subdirectoryという名前のサブディレクトリから再帰的にすべてのファイルを表します。
-
重要
buildspec 宣言は有効な YAML である必要があるため、buildspec 宣言のスペースは重要です。buildspec の宣言にあるスペースの数が無効な場合、すぐにビルドが失敗する可能性があります。YAML validator を使用して、buildspec の宣言が有効な YAML かどうかをテストできます。
AWS CLIビルドプロジェクトを作成または更新するときに または AWS SDKs を使用して buildspec を宣言する場合、buildspec は YAML 形式で表現された単一の文字列で、必要な空白文字と改行エスケープ文字を含める必要があります。次のセクションに例があります。
buildspec.yml ファイルの代わりに CodeBuild または AWS CodePipeline コンソールを使用する場合は、 buildフェーズのコマンドのみを挿入できます。上記の構文を使用する代わりに、ビルドフェーズで実行するすべてのコマンドを 1 行に記載します。複数のコマンドについては、&& で各コマンドを区切ります (例: mvn test && mvn
package)。
buildspec.yml ファイルの代わりに CodeBuild または CodePipeline コンソールを使用して、ビルド環境でビルド出力アーティファクトの場所を指定することができます。上記の構文を使用する代わりに、すべての場所を 1 行に記載します。複数の場所の場合は、各場所をコンマで区切ります (例: buildspec.yml, target/my-app.jar)。
buildspec の例
buildspec.yml ファイルの例を次に示します。
version: 0.2 env: variables: JAVA_HOME: "/usr/lib/jvm/java-8-openjdk-amd64" parameter-store: LOGIN_PASSWORD: /CodeBuild/dockerLoginPassword phases: install: commands: - echo Entered the install phase... - apt-get update -y - apt-get install -y maven finally: - echo This always runs even if the update or install command fails pre_build: commands: - echo Entered the pre_build phase... - docker login -u User -p $LOGIN_PASSWORD finally: - echo This always runs even if the login command fails build: commands: - echo Entered the build phase... - echo Build started on `date` - mvn install finally: - echo This always runs even if the install command fails post_build: commands: - echo Entered the post_build phase... - echo Build completed on `date` reports: arn:aws:codebuild:your-region:your-aws-account-id:report-group/report-group-name-1: files: - "**/*" base-directory: 'target/tests/reports' discard-paths: no reportGroupCucumberJson: files: - 'cucumber/target/cucumber-tests.xml' discard-paths: yes file-format: CUCUMBERJSON # default is JUNITXML artifacts: files: - target/messageUtil-1.0.jar discard-paths: yes secondary-artifacts: artifact1: files: - target/artifact-1.0.jar discard-paths: yes artifact2: files: - target/artifact-2.0.jar discard-paths: yes cache: paths: - '/root/.m2/**/*'
または AWS SDKs で使用する 1 つの文字列として表される前述の buildspec の例 AWS CLIを次に示します。
"version: 0.2\n\nenv:\n variables:\n JAVA_HOME: \"/usr/lib/jvm/java-8-openjdk-amd64\\"\n parameter-store:\n LOGIN_PASSWORD: /CodeBuild/dockerLoginPassword\n phases:\n\n install:\n commands:\n - echo Entered the install phase...\n - apt-get update -y\n - apt-get install -y maven\n finally:\n - echo This always runs even if the update or install command fails \n pre_build:\n commands:\n - echo Entered the pre_build phase...\n - docker login -u User -p $LOGIN_PASSWORD\n finally:\n - echo This always runs even if the login command fails \n build:\n commands:\n - echo Entered the build phase...\n - echo Build started on `date`\n - mvn install\n finally:\n - echo This always runs even if the install command fails\n post_build:\n commands:\n - echo Entered the post_build phase...\n - echo Build completed on `date`\n\n reports:\n reportGroupJunitXml:\n files:\n - \"**/*\"\n base-directory: 'target/tests/reports'\n discard-paths: false\n reportGroupCucumberJson:\n files:\n - 'cucumber/target/cucumber-tests.xml'\n file-format: CUCUMBERJSON\n\nartifacts:\n files:\n - target/messageUtil-1.0.jar\n discard-paths: yes\n secondary-artifacts:\n artifact1:\n files:\n - target/messageUtil-1.0.jar\n discard-paths: yes\n artifact2:\n files:\n - target/messageUtil-1.0.jar\n discard-paths: yes\n cache:\n paths:\n - '/root/.m2/**/*'"
CodeBuild または CodePipeline コンソールで使用する build フェーズのコマンドの例を次に示します。
echo Build started on `date` && mvn install
これらの例では:
-
JAVA_HOMEのキーと/usr/lib/jvm/java-8-openjdk-amd64の値を持つプレーンテキストのカスタム環境変数が設定されます。 -
Amazon EC2 Systems Manager パラメータストアに保存した
dockerLoginPasswordというカスタム環境変数は、後でLOGIN_PASSWORDキーを使用してビルドコマンドで参照します。 -
これらのビルドフェーズ名は変更できません。この例で実行されるコマンドは、
apt-get update -yとapt-get install -y maven(Apache Maven をインストールする)、mvn install(ソースコードをコンパイル、テストして、ビルド出力アーティファクトにパッケージ化し、ビルド出力アーティファクトを内部リポジトリにインストールする)、docker login(Amazon EC2 Systems Manager パラメータストアで設定したカスタム環境変数dockerLoginPasswordの値に対応するパスワードを使用して Docker へサインインする)、およびいくつかのechoコマンドです。これらのechoコマンドは、CodeBuild がコマンドを実行する方法と、コマンドの実行順序を示すためにここに含めています。 -
filesはビルド出力場所にアップロードするファイルを表します。この例では、CodeBuild が 1 つのファイル「messageUtil-1.0.jar」をアップロードします。messageUtil-1.0.jarファイルは、ビルド環境のtargetという名の相対ディレクトリ内にあります。discard-paths: yesが指定されたため、messageUtil-1.0.jarは直接アップロードされます (中間のtargetディレクトリにはアップロードされません)。ファイル名messageUtil-1.0.jarおよび相対ディレクトリ名targetは、Apache Maven がこの例のビルド出力アーティファクトを作成して保存する方法にのみ基づいています。独自のシナリオでは、これらのファイル名とディレクトリは異なります。 -
reportsは、ビルド中にレポートを生成する 2 つのレポートグループを表します。-
arn:aws:codebuild:your-region:your-aws-account-id:report-group/report-group-name-1は、レポートグループの ARN を指定します。テストフレームワークによって生成されたテスト結果は、target/tests/reportsディレクトリにあります。ファイル形式はJunitXmlであり、パスはテスト結果を含むファイルから削除されません。 -
reportGroupCucumberJsonは、新しいレポートグループを指定します。プロジェクトの名前がmy-projectの場合、ビルドの実行時にmy-project-reportGroupCucumberJsonという名前のレポートグループが作成されます。テストフレームワークによって生成されたテスト結果は、cucumber/target/cucumber-tests.xmlにあります。テストファイルの形式は、CucumberJsonで、テスト結果を含むファイルからパスが削除されます。
-
buildspec のバージョン
次の表に、buildspec のバージョンとバージョン間の変更を示します。
| バージョン | 変更 |
|---|---|
| 0.2 |
|
| 0.1 | これは、ビルド仕様形式の最初の定義です。 |