CodeBuildでCodeCommitからコンテナイメージをビルドしてECRにプッシュする
こちらを参考にやっていきます。




Dockerイメージをビルドする場合は特権を付与します。
また、デフォルトで作成されるサービスロールにはECRへの操作権限がないため付与する必要があります。

ビルドの詳細なログが見えるようにCloudWatch Logsは有効にします。
作成したビルドプロジェクトの編集⇒環境⇒追加設定からセットできます。
作成したリージョン名とECRのURIをセットします。
初回はなぜか失敗しましたが二回目回すと成功しました。

ECRにもイメージがプッシュされています。

CodeCommit⇒CodeBuild⇒ECRの流れを理解することができました。
次はさらに発展させて、CodePipelineとCodeDeployでECSにデプロイするところまでやってみたいと思います。
目次
CodeCommit
リポジトリの作成
以前の記事で書いたので割愛します。ビルド資源をプッシュ
ビルドするNginxコンテナ定義のDockerfileとそこでホストする適当なindex.html。FROM amazonlinux:2 RUN amazon-linux-extras install nginx1 -y ADD ./index.html /usr/share/nginx/html/index.html EXPOSE 80 CMD ["/usr/sbin/nginx", "-g", "daemon off;"]及びCodeBuildのビルド定義になるbuildspec.ymlを作成してCodeCommitにプッシュします。
version: 0.2
phases:
pre_build:
commands:
- echo Logging in to Amazon ECR...
- aws --version
- $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email)
# - REPOSITORY_URI=012345678910.dkr.ecr.us-east-1.amazonaws.com/hello-world
- COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
- IMAGE_TAG=build-$(echo $CODEBUILD_BUILD_ID | awk -F":" '{print $2}')
build:
commands:
- echo Build started on `date`
- echo Building the Docker image...
- docker build -t $REPOSITORY_URI:latest .
- docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
post_build:
commands:
- echo Build completed on `date`
- echo Pushing the Docker images...
- docker push $REPOSITORY_URI:latest
- docker push $REPOSITORY_URI:$IMAGE_TAG
# - printf '[{"name":"hello-world","imageUri":"%s"}]' $REPOSITORY_URI:$IMAGE_TAG > imageDetail.json
# artifacts:
# files:
# - imageDetail.json
ECR
リポジトリの作成
CodeBuildのプッシュ先になるリポジトリ(コンテナレジストリ)をECRに作成します。
CodeBuild
ビルドプロジェクトを作成
CodeBuildでビルドプロジェクトを作成します。


また、デフォルトで作成されるサービスロールにはECRへの操作権限がないため付与する必要があります。


環境変数を設定
buildspec.ymlに書いた「AWS_DEFAULT_REGION」と「REPOSITORY_URI」を環境変数としてビルドプロジェクトにパラメータ設定します。作成したビルドプロジェクトの編集⇒環境⇒追加設定からセットできます。
作成したリージョン名とECRのURIをセットします。

ビルドの開始
ビルドプロジェクトから直接ビルドを実行します。初回はなぜか失敗しましたが二回目回すと成功しました。


CodeCommit⇒CodeBuild⇒ECRの流れを理解することができました。
次はさらに発展させて、CodePipelineとCodeDeployでECSにデプロイするところまでやってみたいと思います。







