概要

Docker イメージのビルドとプッシュを ECR へ行う config.yml の書き方を紹介します。

テスト用イメージの作成

まずは、適当なイメージを用意。
ここでは nginx を使っていますが、なんでもいいです。

<!-- html/index.html -->
<!DOCTYPE html>
<html>
  <head>
    <title>Document</title>
  </head>
  <body>
    <h1>Hello, CircleCI</h1>
  </body>
</html>
# Dockerfile
FROM nginx
COPY html /usr/share/nginx/html

準備ができたらイメージをビルドして ECR へプッシュ。
あらかじめレポジトリがないと CircleCI を走らせることができない。

以下は AWS-CLI を使って ECR のレポジトリ作成からプッシュする例。

# ECR にレポジトリを作成
aws ecr create-repository \
     --repository-name hello-app \
     --region ap-northeast-1

docker build -t xxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/hello-app:latest

# ECR のレジストリ認証
eval $(aws ecr get-login --region ap-northeast-1 --no-include-email)
docker push xxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/hello-app:latest

CircleCI のセットアップ

ここからは、CircleCI の config.yml について。

書き方は以下の通り。

AWS の認証情報やレポジトリ名は直接ファイルに記載することができない。
これらは CircleCI 側の EnvironmentVariables へ登録し、ファイルにはその環境変数名を記載する。

version: 2.1
orbs:
  aws-ecr: circleci/aws-ecr@6.12.2
workflows:
  build-and-push:
    jobs:
      - aws-ecr/build-and-push-image:
          account-url: AWS_ECR_ACCOUNT_URL
          region: AWS_REGION
          repo: hello-app
          tag: ${CIRCLE_SHA1}

この状態で、Github へプッシュして CircleCI を走らせるとイメージのビルドから ECR のプッシュまでやってくれるようになる。