将变量传递给 azure 管道中的 yaml 模板(如参数)

Pau*_*ugt 5 yaml azure-pipelines

为了最大限度地减少重复的构建脚本,我们在管道中使用模板。这些模板有参数。但是,我现在遇到了一个问题,因为我需要将数据传递到管道启动时尚不可用的模板。(数据是在管道期间的某些步骤中生成的)。由于管道启动时参数会扩展,因此我无法通过参数将数据传递到模板。

我知道我可以引用管道中不同任务、作业和阶段的输出变量,但我使用的模板不知道它在其中执行的周围管道。因此模板不知道如何引用输出变量来自模板之外的其他作业,只是因为模板不知道之前执行过哪些作业。

有什么方法可以在模板中映射变量吗?理想情况下我想做这样的事情:

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']]
Run Code Online (Sandbox Code Playgroud)

并在模板中提供 data1 变量。

$[ stageDependencies.Stage1.some_job.outputs['taskname.data1']] 因此,我试图避免在 template 中使用:,因为Stage1甚至可能不存在于使用该模板的所有管道中。

如果模板只包含步骤,而不是多个作业,我实际上可以做到这一点:

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

    steps:
    - template: templates/Azure/CreateTenant.yaml
Run Code Online (Sandbox Code Playgroud)

不幸的是,我的模板包含多个作业

更新:我已输入功能请求以更好地支持这种情况: https://developercommunity.visualstudio.com/idea/1207453/yaml-template-variablesparameters-that-are-expande.html

Leo*_*SFT 2

如果模板只包含步骤而不是多个作业,我实际上可以做到这一点。不幸的是,我的模板包含多个作业

要解决此问题,您可以在阶段级别而不是作业级别定义变量:

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

    jobs:
      - template: templates/Azure/CreateTenant.yaml
Run Code Online (Sandbox Code Playgroud)

$[ stageDependencies.Stage1.some_job.outputs['taskname.data1']]那么我们就可以避免在模板中使用: 。

您可以查看文档变量范围以获取更多详细信息。