🐙
はじめての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