CircleCI 2.1からのOrbでdocker buildしてECRにpushし、Slackに通知させる
circleciCircleCI 2.1からOrbというjobをパッケージ化したものが使えるようになり、 自分でjobを書かずとも様々な処理を実行させることができるようになった。
CircleCI 2.0でDocker imageをbuildしてタグを付けてContainer Registryに上げる - sambaiz-net
今回は
を使ってdocker buildしてECRにpushし、バージョンタグが付いている場合はSlackに通知させる。
AWS_ACCESS_KEY_IDとAWS_SECRET_ACCESS_KEYを環境変数に入れて、ECRのリポジトリを作成し、 SlackのwebhookのURLを発行しておく。
version: 2.1
orbs:
aws-ecr: circleci/[email protected]
slack: circleci/[email protected]
executors:
default:
machine: true
environment:
ECR_REPO: 'test-ecr-push'
AWS_ECR_ACCOUNT_URL: '<account_id>.dkr.ecr.<region>.amazonaws.com'
AWS_REGION: '<region>'
CLUSTER_NAME: 'test'
jobs:
notify_slack:
executor: default
steps:
- slack/status:
success_message: '${ECR_REPO}:${CIRCLE_TAG} was released'
webhook: 'https://hooks.slack.com/services/******'
workflows:
build-push:
jobs:
- aws-ecr/build_and_push_image:
name: &build_version 'build-version'
executor: default
repo: '${ECR_REPO}'
tag: '${CIRCLE_TAG}'
filters:
branches:
ignore: /.*/
tags:
only: /^v.*/
- aws-ecr/build_and_push_image:
name: 'build-latest'
executor: default
repo: '${ECR_REPO}'
tag: latest
filters:
branches:
ignore: /.*/
tags:
only: /^v.*/
- aws-ecr/build_and_push_image:
name: 'build-hash'
executor: default
repo: '${ECR_REPO}'
tag: '${CIRCLE_SHA1}'
- notify_slack:
requires:
- *build_version
filters:
branches:
ignore: /.*/
tags:
only: /^v.*/
これだけでAWS CLIのインストールやDockerのセットアップから一通りやってくれる。
Slackへも通知される。
同じjobを複数走らせる場合にrequiresで指定するにはnameが必須になる。 そうでなくてもworkflowで見やすくなるので付けておいた方が良い。 環境変数の記述をjob間で共有するのに、これも2.1から追加されたexecutorを使っている。