以下は、 azure-pipeline-build_changes.ymlスクリプトが従うステップのリストです。スクリプトの行には番号が付けられており、該当する記述をすぐに見つけられるようになっています。
- RegEx(3~4行目)で、Azure DevOpsユーザー/アカウントの名前(5行目)とAzure DevOpsプロジェクトの名前(6行目)をパイプラインURLから抽出します。
- $BUILD_IDというグローバル変数から現在のビルド番号を取得し、前のビルドIDを計算します(8~9 行目)。これらの情報はすべてAPI URLの構築に必要です(11行目)。この呼び出しではACCESSTOKENが必要になります。このトークンは環境変数としてスクリプトに渡されます(47行目)。
- API (curl) を呼び出し、最後のGitプッシュのコミット数を抽出します(15行目)。
git diff
コマンド(21行目)を実行し、そのコミットに関係するプロジェクト内にあるファイルのリストを取得します。- 変更されたこれらのファイルについて、次の情報が与えられます。
- ファイル変数には、<project name>/...というプロジェクトのルートからのファイルの完全パスが含まれています。
- <project name>/processという名前で始まるフォルダーで変更されたファイルにのみ関心があるとします。ここにTalendジョブの定義があります(27行目)。
- bashコマンドを組み合わせれば、ファイルパスからモジュールのリストを抽出できます。この例のリストには、Data Integration、Big Dataバッチ、ストリーミングジョブが含まれています(30〜32行目)。
- Mavenコマンドではモジュールのリストが小文字でなければならないため、変換コマンドが必要です(33行目)。
- ジョブのリストのレポートがコンソールに表示されます(34~40行目)。
- このリストは環境変数として保存され、次回のパイプラインステップで取得されます(44行目)。
- processフォルダーにコミットがない場合はメッセージを表示します(42行目)。
- これで、module_listという変数をAzureパイプラインのステップに従って使用できます(51〜54行目)。注:
condition: ne(variables['module_list'], '')
というパイプライン定義は、関連するコミットが検出されなかった場合はビルドが開始されないようにするうえで大切です。