Skip to content
Latchkey

パイプラインテンプレートとは?pipeline定義を再利用する

パイプラインテンプレートとは、複数のプロジェクトやjobが同じ設定を複製する代わりに呼び出せる、再利用可能でパラメータ化されたpipeline定義です。

すべてのリポジトリが同じ100行のCI YAMLをコピーしていると、たった1つの変更が数十のファイルの編集を意味します。パイプラインテンプレートは、共有ロジックを一度定義し、各プロジェクトがパラメータ付きでそれを呼び出せるようにすることで、これを解決します。これはpipelineに適用されたDRY原則です。ステップは一度書き、入力を変えるのです。

なぜテンプレートが存在するか

テンプレートは共有pipelineロジックを一元化します。プラットフォームチームは「Nodeアプリをbuildしてtestする」テンプレートを1つ保守でき、すべてのNodeリポジトリがそれを呼び出します。修正やポリシー変更は1か所に反映され、そのテンプレートを使うすべての場所へ伝播します。

テンプレートが入力を受け取る仕組み

テンプレートはパラメータ(nodeのバージョン、testコマンド、deployのターゲット)を公開します。呼び出し側が値を渡し、テンプレートがそれらを埋めます。これこそが、1つのテンプレートをforkせずに多くのプロジェクトに適合させるものです。

簡単な例

GitHub Actionsはこれをreusable workflowと呼びます。呼び出し側がuses: my-org/.github/.github/workflows/ci.yml@mainを参照し、with:で入力を渡します。GitLabはテンプレートファイルを取り込むのにinclude:を使います。どちらも共有設定を単一のソースへと変えます。

テンプレートとコピー&ペーストの比較

  • コピー&ペースト: 最初は速いが、時間とともに乖離する。
  • テンプレート: 1つの定義で、どこでも一貫し、統制しやすい。
  • テンプレートは監査も簡単にします。多数ではなく1つのファイルをレビューすればよいのです。

テンプレートのバージョン管理

呼び出し側をテンプレートのtagやcommitに固定し、アップストリームの変更がすべてのpipelineを一度に壊せないようにします。バージョンは意図的に進めましょう。これは共有テンプレートの利点と、突然の更新のリスクとのバランスを取ります。

重要なポイント

  • パイプラインテンプレートは、プロジェクトが呼び出す再利用可能でパラメータ化された定義です。
  • コピー&ペーストされたCI設定をなくし、1つの変更ですべてを更新します。
  • テンプレートの呼び出し側のバージョンを固定し、アップストリームの変更が意図的に展開されるようにしましょう。

関連ガイド