[アップデート] AWS CodePipeline でステージの入力条件に「スキップ」が追加されました

[アップデート] AWS CodePipeline でステージの入力条件に「スキップ」が追加されました

Clock Icon2024.10.17

いわさです。

数ヶ月前に、AWS CodePipeline(V2)ではパイプラインの各ステージが特定の条件を満たされた時のみ続行する方法を、入力条件および成功条件として定義することが出来るようになりました。

https://devio2024-front-preview.developers.io/articles/aws-codepipeline-stage-level-conditions/

これまで入力条件としては「失敗」のみサポートされていたのですが、先日のアップデートで「スキップ」が追加されました。

https://aws.amazon.com/about-aws/whats-new/2024/10/aws-codepipeline-skipping-stage/

ユースケースについてはあまりドキュメントに記載がないのですが、挙動から推察するに失敗ではなく成功ではあるがステージを特定条件でスキップしたい場合に使います。
例えば特定ブランチ以外ではインテグレーションテストのステージをスキップするとか、ステージはスキップするけどもパイプラインとしては成功したものとして扱いたいような時に効果を発揮すると思います。

設定方法

従来のステージ編集時に追加設定が可能で、以下の入力条件として「Skip」が追加されております。

F9CDA1F0-7D7F-4D39-B03F-FD1FD3ACBB17.png

Skip を追加したときのルール設定画面は次のような形です。複数のルールを追加することが出来るのですが、本日時点でスキップと失敗はどちらかしか追加出来ないようなのでご注意ください。
ただこれは役割が違うので両方設定出来ても良い気がしますけどね。

B69B881D-1EA8-40B0-B9BA-E2624560DF8E.png

ルールの設定内容は失敗を設定する場合と同じですね。
ルール名とルールプロバイダーと各詳細な条件を設定します。

75062FC0-3A6D-433D-A0E9-D29EFD3CDA8C.png

スキップの場合もルールプロバイダーは 4 種類選択出来そうに見えますが、実際には LambdaInvoke と VariableCheck のみがサポートされているようです。

https://docs.aws.amazon.com/codepipeline/latest/userguide/stage-conditions.html

For Entry conditions that use the Skip result to skip the stage if the condition fails, only the LambdaInvoke and VariableCheck rules are supported.

上記以外で設定してみると次のようにパイプライン保存時にエラーとなりました。

E460F9D6-AF3D-453D-85DB-3C369D9456AD_4_5005_c.jpeg

VariableCheck でスキップさせてみた

今回は VariableCheck ルールを使って特定条件時以外はスキップするように構成してみました。
VariableCheck ではパイプライン実行時の変数を参照して条件とすることが出来ます。

変数は独自で追加することも出来ますし、次のように提供されている変数もあります。

https://docs.aws.amazon.com/codepipeline/latest/userguide/reference-variables.html

今回は main ブランチの場合はスキップするように設定してみました。

5B1E2715-4A23-4E20-80C7-290C75709A36.png

main ブランチに対してコミットをプッシュします。パイプラインがトリガーされました。

A95C6A6D-9CC6-4F5E-98D2-10333F52BA1A.png

おっ、ビルドステージがスキップされましたね。入力条件で「失敗しました」となっています。これがスキップされた状態です。

B0B3E377-6E47-476C-8C13-79628428774A.png

で、パイプラインステータスを見てみるとこちらは成功として扱われています。
つまりステージのスキップが発生してもそれは想定されているものであり、パイプラインとしては正常に終了しているものとして扱われます。
そのため、ステージの上書きやロールバックもスキップの場合は出来ません。

077FD830-A397-41F9-841D-71EC77E05E27.png

ちなみにスキップではなく失敗の場合は次のようになりまして、失敗したステージの上書き条件を設定したり、ロールバックを行うことが出来ます。もちろんパイプラインステータスも失敗として扱われています。

08A43FB5-126C-47CD-BFA7-35B911892437.png

さいごに

本日は AWS CodePipeline でステージの入力条件に「スキップ」が追加されたので使ってみました。

失敗とスキップの違いを覚えておくと使いこなせそうですね。
スキップは失敗と異なり、想定される正常動作でパイプラインとして成功と見なされること、そしてロールバックやオーバーライドなどの操作が出来ないことが特徴です。
そのため、文字通り想定されるスキップ条件を満たすために使われるものだと解釈して良さそうです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.