ごった煮

色々な事を書いてます

Azure Pipeline で YAML が保存されているリポジトリと異なるリポジトリをチェックアウトする

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'

チェックアウトすると、各リポジトリ名のフォルダ下に、リポジトリの内容がチェックアウトされます。

まとめ

意外とこういうことをしたい時ってありますよね