概要
AWS CodeBuild の処理内容を記載した buildspec.yml のファイルをローカルで動作検証する方法をまとめてみました。
今回は、Amazonlinux2(aws/codebuild/amazonlinux2-x86_64-standard:3.0)を利用してビルドします。
作業
イメージ取得
まずは実行イメージとビルドイメージをpullしてきます。
$ docker pull public.ecr.aws/codebuild/amazonlinux2-x86_64-standard:3.0
$ docker pull public.ecr.aws/codebuild/local-builds:latest
実行エージェントの取得
実行用のスクリプトをダウンロードし、権限を付与します。
$ wget https://raw.githubusercontent.com/aws/aws-codebuild-docker-images/master/local_builds/codebuild_build.sh
$ chmod +x codebuild_build.sh
各種設定ファイルの準備
buildspec.ymlのサンプルファイルを準備います。
Version: 0.2
phases:
build:
commands:
- echo '==================================='
- echo $INPUT_TEXT1
- echo $INPUT_TEXT2
- echo '==================================='
テスト用の環境変数を設定します。
INPUT_TEXT1=build_test1!!!
INPUT_TEXT2=build_test2!!!!
ファイル構成は以下のようになります。
.
├── buildspec.yml
├── codebuild_build.sh
└── codebuild_local.env
実行(サンプル)
./codebuild_build.sh -c -i public.ecr.aws/codebuild/amazonlinux2-x86_64-standard:3.0 -s `pwd` -a ./artifacts -e codebuild_local.env -p [your aws profile]
※ 注)上記コマンドをコピーすると -c -i
の間のスペースが全角になる場合があります。コマンド実行でエラーが発生する場合はスペースの確認をしてみてください。
必須
-i
実行イメージを指定します。
-a
outputの場所を指定します。
オプション
-c
ローカルのaws認証情報を利用する場合は指定します。(例えばaws cliを利用して何か処理をするときは指定が必要です。)
-s
ソースコード実行したい buildspec.yml
のファイルがあるディレクトリを指定してください。指定がない場合はカレンとディレクトリが参照されます。
-e
環境変数を記述したファイルを指定できます。
-p
aws profileの指定ができます。
参考
実行結果
Removing agent-resources_build_1 ... done
Removing agent-resources_agent_1 ... done
Removing network agent-resources_default
Removing volume agent-resources_source_volume
Removing volume agent-resources_user_volume
Creating network "agent-resources_default" with the default driver
Creating volume "agent-resources_source_volume" with local driver
Creating volume "agent-resources_user_volume" with local driver
Creating agent-resources_agent_1 ... done
Creating agent-resources_build_1 ... done
Attaching to agent-resources_agent_1, agent-resources_build_1
agent_1 | [Container] 2022/03/03 23:48:57 Waiting for agent ping
agent_1 | [Container] 2022/03/03 23:48:59 Waiting for DOWNLOAD_SOURCE
agent_1 | [Container] 2022/03/03 23:49:00 Phase is DOWNLOAD_SOURCE
agent_1 | [Container] 2022/03/03 23:49:00 CODEBUILD_SRC_DIR=/codebuild/output/src665470603/src
agent_1 | [Container] 2022/03/03 23:49:00 YAML location is /codebuild/output/srcDownload/src/buildspec.yml
agent_1 | [Container] 2022/03/03 23:49:00 Processing environment variables
agent_1 | [Container] 2022/03/03 23:49:00 Moving to directory /codebuild/output/src665470603/src
agent_1 | [Container] 2022/03/03 23:49:00 Registering with agent
agent_1 | [Container] 2022/03/03 23:49:00 Phases found in YAML: 1
agent_1 | [Container] 2022/03/03 23:49:00 BUILD: 4 commands
agent_1 | [Container] 2022/03/03 23:49:00 Phase complete: DOWNLOAD_SOURCE State: SUCCEEDED
agent_1 | [Container] 2022/03/03 23:49:00 Phase context status code: Message:
agent_1 | [Container] 2022/03/03 23:49:00 Entering phase INSTALL
agent_1 | [Container] 2022/03/03 23:49:00 Phase complete: INSTALL State: SUCCEEDED
agent_1 | [Container] 2022/03/03 23:49:00 Phase context status code: Message:
agent_1 | [Container] 2022/03/03 23:49:00 Entering phase PRE_BUILD
agent_1 | [Container] 2022/03/03 23:49:00 Phase complete: PRE_BUILD State: SUCCEEDED
agent_1 | [Container] 2022/03/03 23:49:00 Phase context status code: Message:
agent_1 | [Container] 2022/03/03 23:49:00 Entering phase BUILD
agent_1 | [Container] 2022/03/03 23:49:00 Running command echo '==================================='
agent_1 | ===================================
agent_1 |
agent_1 | [Container] 2022/03/03 23:49:00 Running command echo $INPUT_TEXT1
agent_1 | build_test1!!!
agent_1 |
agent_1 | [Container] 2022/03/03 23:49:00 Running command echo $INPUT_TEXT2
agent_1 | build_test2!!!!
agent_1 |
agent_1 | [Container] 2022/03/03 23:49:00 Running command echo '==================================='
agent_1 | ===================================
agent_1 |
agent_1 | [Container] 2022/03/03 23:49:00 Phase complete: BUILD State: SUCCEEDED
agent_1 | [Container] 2022/03/03 23:49:00 Phase context status code: Message:
agent_1 | [Container] 2022/03/03 23:49:00 Entering phase POST_BUILD
agent_1 | [Container] 2022/03/03 23:49:00 Phase complete: POST_BUILD State: SUCCEEDED
agent_1 | [Container] 2022/03/03 23:49:00 Phase context status code: Message:
agent-resources_agent_1 exited with code 0
Stopping agent-resources_build_1 ... done
Aborting on container exit...
buildspec.yml
記述した通りの出力になってれば成功です!
参考サイト