CircleCI:マルチレポジトリモデル コードとパイプライン定義の分離の実現
従来CirclCIのパイプラインを設定するconfig.yml
はデプロイ対象のソースコードが格納されているレポジトリと原則として同じ場所である必要がありました。
この場合本来ソースコードが管理されているレポジトリに異分子が混ざることとなり管理上の煩雑さが生まれるケースがあります。
また、設定によってはソースコードを修正せず、パイプラインの設定ファイルを修正しただけで、パイプラインが起動してしまい再デプロイが発生する、というケースも考えられます。さらに、単一のパイプライン設定を複数プロジェクトで共有して利用する場合、設定ファイルが複数に分散し一元管理が難しいという課題がありました。
マルチレポジトリモデル
この課題を解決するため、新しくマルチレポジトリモデル
という機能が2025年の1月にリリースされました。
シンプルに言えば、ソースコードの管理レポジトリとパイプラインの設定ファイルを分離させることが可能になりました。これにより複数プロジェクトから単一のパイプラインを呼び出したり、コードの管理とパイプライン管理を分離させることが容易になりました。
さっそくやってみる
1. パイプライン管理専用Gitレポジトリの作成
circleci
というプライベートレポジトリを作成します。
templates/config.yml
というファイルを配置します。これがCircleCIのパイプラインを定義するものです。
version: 2.1
jobs:
build:
docker:
- image: cimg/node:18.20
steps:
- checkout
- run:
name: 依存関係をインストール
command: npm install
- run:
name: 完了メッセージ
command: echo " Node環境のビルドが完了しました!"
workflows:
version: 2
build_and_test:
jobs:
- build
2. Project SettingsでPipeline設定の変更
Project Settings
画面左ペインからProject Setup
をクリックします。
既存プロジェクトはこのように、同じレポジトリのconfig.yml
を指定しており、すべてのイベントでパイプラインが起動するようになっているため、削除を行います。最初にTrigger
を削除すれば全体設定が削除できます。
次にAdd pipeline
をクリックして新たに1個作成します。
このようにConfig source
にcircleci
というコンフィグ専用レポジトリを指定して、Config filepath
にtemplates/config.yml
と先ほど作成したパイプライン設定ファイルを指定します。
Checkout source
には従来通りソースコードレポジトリを指定します。
作成でいたらGitHub trigger
をクリックしてトリガーを設定します。
Event Source
が今回のポイントです。ソースコードレポジトリのイベントをキャッチしたいのでCheckout source
と同じレポジトリを指定します。
あとはSave
すれば完了です。
3. テスト
従来通りCheckout source
(Event Source
と同じ)レポジトリに何かをマージすればパイプランが起動します。同じレポジトリの./circleci/config.yml
ではなくConfig source
のtemplates/config.yml
の内容が実行されていることがわかります。
Discussion