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

时间:2020-04-27 21:05:07

标签: azure-pipelines azure-yaml-pipelines

从天蓝色的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可以用运行时表达式$(slotName)直接替换marco $[ dependencies.setup.outputs['slot.name'] ],结果如下:

   - 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'] ]

但是,如果执行此操作,则管道会失败

enter image description here

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

1 个答案:

答案 0 :(得分:1)

在您的slot.name作业上调用create_slot没有语法问题,这里的问题应该由您在setup作业中使用的脚本解决。由于您没有分享setup工作的脚本,因此我在下面与我一起发布了它的一些要点。

在您的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获得变量名称:

enter image description here