💭

メモ: AWS CodePipelineで承認待ちが複数発生したときの挙動

2022/07/19に公開

これはなに?

今日、AWS CodePipelineの構築をしていたときに、「そういや手動承認のステージって一つしか承認できないけど、その間に2つも3つも実行されたらどういう順序で実行されるんだっけ?」というのを調べた時のメモ(数年前に同じようなことを調べた気がするので今度こそ忘れないようにメモとしてpublishしておく)

結論: 承認ステージに乗っているもの + 最新のものだけが生き残る

https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/concepts-how-it-works.html
ここに全て書いてあるが、CodePipelineではステージに乗っていない実行は同時に一つしか保持できず、新しい実行が後から追いついた場合、ステージに乗っていない状態の古い実行はキャンセルされ、新しい実行に置き換えられる。
以下は置き換えについての説明部分

試した時のメモ

  1. まず、Githubの特定のリポジトリにpushされたら発火するパイプラインを作る。この際に手動承認ステージを作っておく
  2. "tmp"とコミットログに書いてcommitしてpushする
  3. "tmp"のコミットが手動承認ステージに乗って承認待ち状態になってることを確認する
  4. "tmp2"とコミットログに書いてcommitしてpushする
  5. "tmp"のコミットが手動承認ステージにいるため、"tmp2"のコミットはインバウンド実行(上に貼ったドキュメントに書いてある)としてステージに入る前の状態で保持される
  6. "tmp3"とコミットログに書いてcommitしてpushする
  7. "tmp2"のコミットで発火した実行はキャンセル(正確にはsuperseded = 置き換えられた)されて、インバウンド実行として"tmp3"のコミットが保持されていることを確認した
    a. 実行履歴上の状態についての説明 https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/concepts.html#concepts-superseded

ちなみに

CodePipelineの実行履歴を見ると代入されましたとなっているが、これはsupersededのこと

Discussion