今回独自コンテナでCI回せないのか(ECR)と思いきや、
CircleCI 2.0で実現できたので今回試してみました。
■AWS EC2 Container Registry (ECR) Support
https://circleci.com/blog/aws-ecr-auth-support/
CircleCIのDeveloperである Ricardo N Felicianoさんは以下のように答えています。
(どう見てもラッパー)
TL:DR; CircleCI 2.0 now supports authenticating to AWS EC2 Container Registry (ECR) straight from the Docker executor. This means you can use private Docker images from ECR as your build image. View docs.
CircleCI 2.0 brought native Docker support. A project could be built on 2.0 with a public Docker image as the build environment. Crafting a lightweight CI environment customized to your project’s exact needs, and which could be snapshotted to be used over and over again, became commonplace. Users enjoyed having this ability but said they wanted support for private images as well. Not long after, the auth key was introduced to support logging into a Docker registry to pull a private image as your build environment:
(訳)
AWS EC2 Container Registry(ECR)への認証をサポートします。ECRのプライベートDockerイメージをビルドイメージとして使用できます。
CircleCI 2.0はネイティブのDockerサポートしました。ビルド環境として公開されたDockerイメージを使用して、2.0でプロジェクトを構築することができます。プロジェクトの正確なニーズに合わせてカスタマイズされた軽量CI環境を作り、繰り返し使用できるようにスナップショットを作成できるようになりました。ユーザーはこの能力を享受しましたが、プライベート画像のサポートも望んでいました。その後、Dockerレジストリにログインしてプライベートイメージをビルド環境としてpullするための認証キーが導入されました。
とりあえずやってみよう。
■IAM
既存のIAMユーザを使い回ししています。権限はAdministrator。
(AmazonEC2ContainerRegistryFullAccessのみが良き)
■ECR/Terraform
・ecr.tf
1 2 3 |
resource "aws_ecr_repository" "adachin-docker" { name = "adachin-docker" } |
ECRはTerraformで管理しているので追加してApply!
■Dockerfileで作ったイメージをECRにpushする
1 2 3 4 5 6 7 8 9 10 |
$ $(aws ecr get-login --no-include-email --region ap-northeast-1) $ docker commit adachin-docker adachin-docker:latest $ docker images |grep adachin-docker # 確認 $ docker tag 977beea96ddf xxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/adachin-docker:latest $ docker push xxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/adachin-docker:latest |
ECRにadachin-docker:latestがあればOK!!
■Setting CircleCI(Environment Variables)
INSIGHTS>リポジトリ名(歯車マーク)>Environment Variables
ここで先程のIAMユーザのクレデンシャルをCircleCIの環境変数にぶち込みます。
・AWS_ACCESS_KEY_ID
・AWS_ACCOUNT_ID
・AWS_SECRET_ACCESS_KEY
■CircleCI/config.toml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
version: 2 jobs: build: working_directory: /go/src/github.com/adachin-go environment: TEST_RESULTS: /tmp/test-results docker: - image: xxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/adachin-docker:latest aws_auth: aws_access_key_id: $AWS_ACCESS_KEY_ID aws_secret_access_key: $AWS_SECRET_ACCESS_KEY steps: - checkout - run: mkdir -p $TEST_RESULTS ~省略~ |
imageの部分をECRのURLにして、aws_authを使ってクレデンシャルの部分を上記の変数に指定するだけです。
いざbuild!!
■CircleCI build
■まとめ
CircleCIなんでもできる!!
しかし毎回イメージ変更あったら手直ししてpushするという作業が発生するので、これもCircleCIかな。
0件のコメント