CodePipelineでデプロイすることに取り組んできましたが、リリースがたまると不都合が発生してきたので、その課題と回避策をまとめてみます。
現在の流れ
Commit -> Build -> マニュアル承認 -> Deploy
- CodePipelineは、main(master)ブランチをトリガーに動く
- CodeBuildでDockerイメージを作って、latestタグを付与している
- CodeBuildまで成功したら、マニュアル承認でデプロイを制御する
- CodeDeployで実行するスクリプトはlatestのイメージを使っている
課題:ブランチが複数回更新されると、更新順通りの最新(latest)がデプロイできない
- 1回目の更新で動くCodePipelineでデプロイのマニュアル承認前に、2回目のブランチ更新が来ると
- 2回目の更新に連動して、CodeBuildが動くので、latestイメージが更新される(ここが問題)
- この状態で、1回目のマニュアル承認すると、latestがデプロイされるので、1回目の更新に関するデプロイができない
回避策
Commit -> マニュアル承認 -> Build -> Deploy
- CodeCommitの次に承認を入れインバウンド実行を利用して、CodeBuildをシーケンシャルにさせることでlatestを保護し順番通りのデプロイを可能にする
考察
そもそも、「デプロイスクリプト、方針、設計がよろしくない」部分もありますが、運用に入るとすぐに変更できない都合もあり、回避策の一つとして参考になれば幸いです