LoginSignup
7
1

More than 3 years have passed since last update.

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

Posted at

概要

以前、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機能を試した

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1