12
4

More than 1 year has passed since last update.

AWS CodeBuild をローカル環境で実行テストする方法

Last updated at Posted at 2022-03-04

概要

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のサンプルファイルを準備います。

buildspec.yml
Version: 0.2
phases:
 build:
   commands:
     - echo '==================================='
     - echo $INPUT_TEXT1
     - echo $INPUT_TEXT2
     - echo '==================================='

テスト用の環境変数を設定します。

codebuild_local.env
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 記述した通りの出力になってれば成功です!

参考サイト

12
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
4