将变量传递给 Azure YAML 管道中的模板

Pass a variable to template in an Azure YAML pipeline

从 azure yaml 管道考虑以下工作

  - job: create_slot
    dependsOn: setup
    displayName: 'Create slot'
    pool:
      vmImage: 'windows-latest'
    variables:
      slotName: $[ dependencies.setup.outputs['slot.name'] ]
    steps:
      - bash: |
          echo "Slot to be created: $(slotName)"
        displayName: 'Show slot name'
      - template: templates/create-slot.yml
        parameters:
          slot: $(slotName)

documentation 我希望我可以用运行时表达式 $[ dependencies.setup.outputs['slot.name'] ] 直接替换 marco $(slotName),结果如下:

   - job: create_slot
    dependsOn: setup
    displayName: 'Create slot'
    pool:
      vmImage: 'windows-latest' 
    steps:
      - bash: |
          echo "Slot to be created: $(slotName)"
        displayName: 'Show slot name'
      - template: templates/create-slot.yml
        parameters:
          slot: $[ dependencies.setup.outputs['slot.name'] ]

但是如果你这样做,管道就会失败

从错误中我得到 $[ dependencies.setup.outputs['slot.name'] ] 被视为字符串的印象。有没有可能是我在这里尝试的,也许我的语法不正确。

在您的 create_slot 作业中调用 slot.name 没有语法问题,这里的问题应该是由您在 setup 作业中使用的脚本引起的。由于您没有分享 setup 工作的脚本,我 post 下面与我分享它的一些要点。

在您的 setup 作业中,它应该包含一个用于生成 输出变量 name 的脚本。 还有,持有变量生成过程的任务应该配置引用名slot

简单示例(已更新):

jobs:
- job: setup
  steps:
  - checkout: none
  - task: PowerShell@2
    inputs:
      targetType: 'inline'
      script: 'echo "##vso[task.setvariable variable=name;isOutput=true]Staging"'
    name: slot
- job: create_slot
  dependsOn: setup
  variables:
    slotName: $[ dependencies.setup.outputs['slot.name'] ]
  steps:
  - checkout: none
  - bash: |
          echo "Slot to be created: $(slotName)"
    displayName: 'Show slot name'

仅此,依赖create_slot作业,setup作业可以使用语法$[ dependencies.Job1.outputs['slot.name'] ]获取变量名: