CodePipeline(V2)のファイルパスのトリガーを試してみた

2024.02.12

CodePipelineで以下のアップデートがありました。

CodePipeline supports additional trigger filters and new execution modes

上記の記事では、大きく以下のアップデートが発表されていました。

  • ブランチおよびファイルパスによるトリガーフィルタリングのサポート
  • 新しいパイプライン実行モードのサポート

上記の中で特に気になった、ファイルパスによるトリガーについて書きました。

概要

  • CodePipelineファイルパスによるトリガーフィルタリングのサポート
    • ファイルパスに一致する場合に、トリガー実行といったことが可能に
    • CodeCommitはトリガーフィルター自体に対応していないため、使用不可
  • フィルターはglobパターンで設定可能
  • 1つのパイプラインに複数のトリガーフィルタリングを追加可能

何が嬉しい

  • モノレポ構成でパイプラインの制御がしやすくなる

モノレポ構成ではリポジトリのPushの度に全てに対してCI/CDを実行すると時間がかるため、システム毎やレイヤーごとにパイプラインを分けたいことがあると思います。

以下に3システムあるとします。

hoge-system
fuga-system
piyo-system

トリガーのファイルパスをhoge-systemにすることで、hoge-system配下に変更があった際にだけ、起動するトリガーを作ることができます。

コードのプッシュまたはプルリクエストでトリガーをフィルターする - AWS CodePipeline

やってみた

事前準備

GitHubでリポジトリtest-codepipeline-file-path-triggerを作成しました。

以下のディレクトリとファイルを用意して、上記リポジトリにPushしました。

% tree   
.
├── fuga-system
│   └── test.txt
├── hoge-system
│   └── test.txt
└── piyo-system
    └── test.txt

CodePipelineの作成

「マネジメントコンソール」 -> 「CodePipeline」 -> 「パイプライン」 -> 「パイプラインを作成する」の順に選択します。

ファイルパストリガーに対応しているのは、V2のみです。

パイプラインタイプがv2になっていることを確認し、次に進みます。

ソースステージは作成したリポジトリを選択します。

トリガーは、以下の設定を行います。

  • トリガータイプ: フィルターを指定
  • イベントタイプ: プッシュ
  • ブランチ: 含める main
  • ファイルパス: 含める hoge-system/**

ファイルパスやブランチに設定するフィルターは、globパターンがサポートされています。

今回は、hoge-system配下の変更をトリガーにしたいため、hoge-system/**と設定しています。

パイプラインの発火を確認できればいいためスキップしたいところですが、パイプラインには少なくとも2つのステージ(ソース含めて)が必要です。

プロジェクトの作成から適当にビルドプロジェクトを作成し、指定します。

デプロイステージはスキップして、レビュー画面で内容を確認し、パイプラインを作成します。

動作確認

トリガーに設定している、hoge-system配下を変更して、CodePipelineが実行されるか確認します。

以下の箇所を変更して、Pushしました。

hoge-system/test.txt

+ Hello
Hoge System
git add .
git commit -m "update: hoge system"
git push origin main

コンソールから実行されていることを確認できました。

続いてターゲット以外の変更で、Pipelineが実行されないことを確認します。

fuga-system/test.txt

+ Hello
Fuga System
git add .
git commit -m "update: fuga system"
git push origin main

Pipelineは実行されませんでした。実行履歴は以下の通りで、hoge-systemの変更以降はパイプラインが実行されていません。

おわりに

他のCI/CDツールと比べて、CodePipelineがファイルパスに対応していないことを不便に思っていた方は多いのではないでしょうか。

個人的には待望の機能でした。CodeCommitが対応していない点は残念ですが、今後に期待ですね。

以上、AWS事業本部の佐藤(@chari7311)でした。