CodeBuildでCodeCommitからコンテナイメージをビルドしてECRにプッシュする
目次
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でビルドプロジェクトを作成します。 Dockerイメージをビルドする場合は特権を付与します。また、デフォルトで作成されるサービスロールにはECRへの操作権限がないため付与する必要があります。 ビルドの詳細なログが見えるようにCloudWatch Logsは有効にします。
環境変数を設定
buildspec.ymlに書いた「AWS_DEFAULT_REGION」と「REPOSITORY_URI」を環境変数としてビルドプロジェクトにパラメータ設定します。作成したビルドプロジェクトの編集⇒環境⇒追加設定からセットできます。
作成したリージョン名とECRのURIをセットします。
ビルドの開始
ビルドプロジェクトから直接ビルドを実行します。初回はなぜか失敗しましたが二回目回すと成功しました。
ECRにもイメージがプッシュされています。
CodeCommit⇒CodeBuild⇒ECRの流れを理解することができました。
次はさらに発展させて、CodePipelineとCodeDeployでECSにデプロイするところまでやってみたいと思います。
ディスカッション
コメント一覧
まだ、コメントがありません