Zenn
🐙

はじめてのCircle CI その4:パイプラインから起動するワークフローに手動承認ステップを加える

に公開

過去3回の記事でCircleCIの基本機能として、GitHub連携を行いprodブランチにのみコミットかマージが行われた際にAWS Lambda関数をデプロイし、完了したらWebhookで通知を出すところまで行いました。
https://zenn.dev/kameoncloud/articles/641dbdd496a59d
https://zenn.dev/kameoncloud/articles/dc567a672e311e
https://zenn.dev/kameoncloud/articles/fa2b181c9dedfb
今日はそのワークフローの手動承認のステップを加えていきます。例えば一つのパイプラインにstatingprodのワークフローを設定して起き、statingブランチへマージされた時は自動でDeployまで行う。prodブランチにマージされた時は手動承認を求める、といった2つの異なるワークフローを一つのパイプラインに登録することができます。

さっそくやってみる

前回までの作業で用いていたパイプラインおよびワークフローの設定ファイルであるconfig.ymlを修正していきます。修正後のファイルは以下の通りです。

config.yml
version: 2.1

executors:
  node-executor:
    docker:
      - image: circleci/node:14
    working_directory: ~/repo

jobs:
  deploy_lambda:
    executor: node-executor
    steps:
      - checkout
      - run:
          name: Create Lambda ZIP
          command: |
            # Lambda用のコードをZIP圧縮
            zip -r lambda.zip .  # カレントディレクトリ(Lambda関数のコード)をZIP圧縮

      - run:
          name: Deploy Lambda function
          command: |
            # AWS CLIをインストール
            curl "https://d1vvhvl2y92vvt.cloudfront.net/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
            unzip awscliv2.zip
            sudo ./aws/install

            # AWS認証情報を環境変数から設定(Contextから引き出される)
            export AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
            export AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
            export AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION}

            # AWS CLIのページャーを無効化
            export AWS_PAGER=""

            # Lambdaのデプロイを実行
            aws lambda update-function-code \
              --function-name firstcci \
              --zip-file fileb://lambda.zip

  approval:
    type: approval
    approval_type: manual
    message: "Please approve the deployment of the Lambda function."

workflows:
  version: 2
  deploy:
    jobs:
      - deploy_lambda:
          context:
            - aws-credentials
          filters:
            branches:
              only:
                - /prod*/
      - approval:
          requires:
            - deploy_lambda

Pipelineの詳細画面に行くとApprovalという箱ができています。

しばらく待ってビルドが行われると紫色となりでApproval待ちとなります。

Approvalの箱をクリックすると以下の様に手承認フローがでてきますので、ApprovalCancelをクリックします。

Cancelをクリックした場合、ステータスがCanceledになります。

config.yml の中身

新しく2つのブロックが加わっています。

<snip>
jobs:
  deploy_lambda:
<snip>
  approval:
    type: approval
    approval_type: manual
    message: "Please approve the deployment of the Lambda function."
<snip>
workflows:
  version: 2
  deploy:
    jobs:
      - deploy_lambda:
<snip>
      - approval:
          requires:
            - deploy_lambda

jobsのapprovalブロックでは、deploy_lambda:ジョブが手動(manual)承認を求めることを示しています。
次のworkflowブロックでは、deploy_lambdaジョブがapprovalが必要であり、上記ジョブの中に記載されているapprovalに従う必要があることを示しています。

Discussion

ログインするとコメントできます