Azure Pipeline でパイプラインを作成する際に、パイプライン定義を保存するリポジトリと、実際のアプリケーションコードのリポジトリを分離したい状況があったので、やり方を備忘録として残します。
どういう状況なのか
- 複数のアプリケーションが、モノレポではなく、それぞれのリポジトリに分かれている
- フレームワーク、テクニカルスタックがほぼイコールなので、CI/CD の設定は、ほとんど使い回しが出来る
- それぞれのリポジトリに別々に定義を書くのは、可能な限り避けたかった
やってみる
一番ミニマムな定義(Starter kit をそのまま使ってます)
pool: {エージェントプール名} steps: - checkout: git://{Azure DevOps のプロジェクト名}/{リポジトリ名} - script: echo Hello, world! displayName: 'Run a one-line script' - script: | echo Add other tasks to build, test, and deploy your project. echo See https://aka.ms/yaml displayName: 'Run a multi-line script'
これで、checkout
に指定したリポジトリがチェックアウトされます。
トリガーを使えるようにする
ミニマムな設定だと、トリガーが使えないので、変更でトリガーされるようにしてみます。
resources: repositories: - repository: {リポジトリをパイプライン内で識別する為の Prefix} name: {Azure DevOps のプロジェクト名}/{リポジトリ名} ref: main type: git trigger: - main pool: {エージェントプール名} steps: - checkout: {リポジトリをパイプライン内で識別する為の Prefix} - script: echo Hello, world! displayName: 'Run a one-line script' - script: | echo Add other tasks to build, test, and deploy your project. echo See https://aka.ms/yaml displayName: 'Run a multi-line script'
これで、main ブランチに対する変更でトリガーされるようになります。
次のように checkout
を並べれば、複数のリポジトリをチェックアウトすることも出来ます。
resources: repositories: - repository: {リポジトリをパイプライン内で識別する為の Prefix} name: {Azure DevOps のプロジェクト名}/{リポジトリ名} ref: main type: git trigger: - main pool: {エージェントプール名} steps: - checkout: self - checkout: {リポジトリをパイプライン内で識別する為の Prefix} - script: echo Hello, world! displayName: 'Run a one-line script' - script: | echo Add other tasks to build, test, and deploy your project. echo See https://aka.ms/yaml displayName: 'Run a multi-line script'
チェックアウトすると、各リポジトリ名のフォルダ下に、リポジトリの内容がチェックアウトされます。
まとめ
意外とこういうことをしたい時ってありますよね