🐙
はじめてのCircle CI その4:パイプラインから起動するワークフローに手動承認ステップを加える
過去3回の記事でCircleCIの基本機能として、GitHub連携を行いprodブランチにのみコミットかマージが行われた際にAWS Lambda関数をデプロイし、完了したらWebhookで通知を出すところまで行いました。
今日はそのワークフローの手動承認のステップを加えていきます。例えば一つのパイプラインにstatingとprodのワークフローを設定して起き、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の箱をクリックすると以下の様に手承認フローがでてきますので、ApprovalかCancelをクリックします。

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