Azureパイプラインのyamlテンプレート(パラメーターなど)に変数を渡します

Aug 20 2020

重複するビルドスクリプトを最小限に抑えるために、パイプラインでテンプレートを利用します。これらのテンプレートにはパラメーターがあります。ただし、パイプラインの開始時にまだ使用できないテンプレートにデータを渡す必要があるため、問題が発生しました。(データはパイプライン中のいくつかのステップで生成されます)。パイプラインの開始時にパラメーターが展開されるため、パラメーターを介してデータをテンプレートに渡すことができません。

パイプライン内のさまざまなタスク、ジョブ、およびステージの出力変数を参照できることはわかっていますが、使用しているテンプレートには、それが実行される周囲のパイプラインに関する知識がありません。したがって、テンプレートは出力変数を参照する方法を知りません。テンプレートが以前に実行されたジョブを認識していないという理由だけで、テンプレート外の他のジョブから。

テンプレートに変数をマッピングする方法はありますか?理想的には、次のようなことをしたいと思います。

stages:
- stage: Stage1
  jobs:
  - some job that creates output variables
- stage: Stage2
  jobs:
  - template: 'myTemplate.yaml'
    variables:
      data1: $[ stageDependencies.Stage1.some_job.outputs['taskname.data1']]

テンプレート内でdata1変数を使用できるようにします。

$[ stageDependencies.Stage1.some_job.outputs['taskname.data1']] テンプレートStage1を使用するすべてのパイプラインに存在するわけではないため、テンプレートで:を使用する必要がないようにしています。

テンプレートに複数のジョブではなくステップのみが含まれている場合、実際にこれを行うことができます。

- stage: Stage2
  jobs:
  - job: Job1
    variables:
      data1: $[ stageDependencies.Stage1.some_job.outputs['taskName.data1']]

    steps:
    - template: templates/Azure/CreateTenant.yaml

残念ながら、私のテンプレートには複数のジョブが含まれています

更新:この状況をより適切にサポートするための機能リクエストを入力しました: https://developercommunity.visualstudio.com/idea/1207453/yaml-template-variablesparameters-that-are-expande.html

回答

2 LeoLiu-MSFT Aug 21 2020 at 07:48

テンプレートに複数のジョブではなくステップのみが含まれている場合、実際にこれを行うことができます。残念ながら、私のテンプレートには複数のジョブが含まれています

この問題を解決するには、ジョブレベルではなくステージレベルで変数を定義できます。

  - stage: Stage2
    variables:
      data1: $[ stageDependencies.Stage1.some_job.outputs['taskName.data1']]

    jobs:
      - template: templates/Azure/CreateTenant.yaml

そうすれば$[ stageDependencies.Stage1.some_job.outputs['taskname.data1']]、テンプレートで:を使用する必要がなくなります。

詳細については、ドキュメントの変数スコープを確認してください。