まくろぐ

Azure Pipelinesメモ: azure-pipelines.yml から別の Yaml をインクルードする (template)

更新:
作成:

Template 機能

Azure Pipelines の Template 機能を使用すると、別の Yaml ファイルに記述したビルド設定をインクルードすることができます。

変数を渡して、部分的に内容を置き換えることができるので、「インクルード」ではなく「テンプレート」と呼んでいるみたいです。

単純に共通の steps を読み込んで使うこともできるし、逆にテンプレートファイルに対してパラメータで stepList を渡すということもできます。

使用例(steps の共通化)

例えば、別の Yaml ファイル(テンプレート)に記述した steps 定義を、azure-pipelines.yml から読み込むとします。 テンプレートファイルには次のような感じで、ルートに steps 要素を記述します。

common-steps.yml(テンプレート)
steps:
- task: NodeTool@0
  inputs:
    versionSpec: '10.x'
  displayName: 'Install Node.js'

- task: Npm@1
  inputs:
    command: 'ci'
  displayName: 'npm ci'

- task: Npm@1
  inputs:
    command: 'custom'
    customCommand: 'run lint'
  displayName: 'npm run lint'

# ...

azure-pipelines.ymlsteps 以下で、上記のテンプレートファイルを読み込むには、template というキーワードを使用します。

azure-pipelines.yml(抜粋)
pool:
  vmImage: 'ubuntu-latest'

steps:
- script: echo Hello
- template: common-steps.yml
- script: echo World

template キーワードは任意の位置で使用できるので、上記のように前後に別の step を入れることが可能です。

使用例(jobs の共通化)

上記の例では steps のテンプレートを読み込む方法を示しましたが、jobs ごと読み込む場合も同様に記述できます。 jobs の下には、steps だけではなく、variablespool などを記述できるため、steps 単位のテンプレートより使い勝手がよいかもしれません(参考: jobs のスキーマ定義)。

common-jobs.yml(テンプレート)
jobs:
- job: HugoBuild

  variables:
    hugo_version: '0.68.3'

  pool:
    vmImage: 'ubuntu-latest'

  steps:
  - script: wget -O hugo.deb https://github.com/gohugoio/hugo/releases/download/v$(hugo_version)/hugo_extended_$(hugo_version)_Linux-64bit.deb
    displayName: 'Download Hugo $(hugo_version)'

  - script: sudo dpkg -i hugo.deb
    displayName: 'Install Hugo $(hugo_version)'

  - script: hugo
    displayName: 'Build Hugo site'

  - script: hugo deploy
    displayName: 'Deploy Hugo site'
    env:
      AZURE_STORAGE_ACCOUNT: $(AZURE_STORAGE_ACCOUNT)
      AZURE_STORAGE_KEY: $(AZURE_STORAGE_KEY)
azure-pipelines.yml
jobs:
- template: azure-pipelines-common-jobs.yml

関連記事

まくろぐ
サイトマップまくへのメッセージ