Help us understand the problem. What is going on with this article?

CircleCI Orbsでデプロイ承認ボタンを作ってSlackに通知させる

概要

以前、CircleCI OrbsでECS Fargateのデプロイを自動化という記事を書いたのですが、
この仕組みだと特定のブランチにマージしたタイミングで自動デプロイが走ってしまいます。

本番環境だけは、マージ=デプロイ でななく、任意のタイミングでデプロイしたいってこともあると思うので、
CircleCI Orbsを使ってそのあたりを制御したい思います。

イメージとしては、特定のブランチにマージした段階で
スクリーンショット 2019-09-05 14.24.32.png
と言うようなSlack通知が来て、Visit Workflowのリンクを踏むと
スクリーンショット 2019-09-05 14.26.52.png
が表示され、Approveをクリックすると、デプロイできるという仕組みが作れます。

前提条件

  • CircleCIとGithubのインテグレーションは設定しておく

設定

前回のconfig.yamlを基に設定してみます。
前回からの差分のみコメントを入れてます。

version: 2.1
orbs:
  aws-ecr: circleci/aws-ecr@1.0.0
  aws-ecs: circleci/aws-ecs@0.0.6
  slack: circleci/slack@3.3.0 # (1)circleci/slack 設定

executors:
  docker_build:
    machine:
      docker_layer_caching: true

workflows:
  build-and-deploy:
    jobs:
      - build
      - aws-ecr/build_and_push_image:
          executor: docker_build
          name: 'build-staging'
          account-url: AWS_ECR_ACCOUNT_URL
          region: AWS_REGION
          repo: '<ECRのリポジトリ名>'
          tag: "${CIRCLE_SHA1}"
          path: ./
          dockerfile: Dockerfile-staging
          requires:
            - build
          filters:
            branches:
              only:
                - staging
      - slack/approval-notification: #(2)Slack通知用jobを追加
          message: "<Your APP NAME>ステージング環境へのデプロイを承認してください。"
          color: "#F5E911"
          requires:
            - build-staging
      - approval-deploy: #(3)承認用jobを追加
          type: approval
          requires:
            - build-staging
      - aws-ecs/deploy-service-update:
          requires:
            - build-staging
            - approval-deploy #(4) approval-deployで承認されるないと走らない
          family: '<Fargateのタスク定義名>'
          service-name: '<Fargateのサービス名>'
          cluster-name: '<Fargateのクラスタ名>'
          container-image-name-updates: 'container=<タスク定義で設定したコンテナ名>,image-and-tag=${AWS_ECR_ACCOUNT_URL}/<ECRのリポジトリ名>:${CIRCLE_SHA1}'
          filters:
            branches:
              only:
                - staging

ざっくり解説すると、

  • (2) でSlack通知用の詳細設定を入れて
  • (3) でさきほどの例で示した承認ボタンを作ります。
  • (4) でデプロイするんですが、requiresapproval-deployを入れてるため、承認ボタンが押されるまではデプロイが走りません。

(2)に関しては、メンションもつけることが可能なので詳細は、オフィシャルドキュメントを参考にしてください。

基本的に当該リポジトリへの権限がある人しか承認ボタンを押せないとと思うので、
ある程度はセキュリティは担保できるかと。ちなみに誰が承認したかも分かります。

参考文献

この記事は以下の情報を参考にして執筆しました。

CircleCIのManual Approval機能を試した

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away