2

是否可以在稍后阶段的条件部分中使用在多阶段管道构建上设置的构建标签?

    ##### task in build stage #####
    - task: YodLabs.VariableTasks.AddTag.AddTag@0
      displayName: Adding environment tag to build
      inputs:
        tags: |
          deploy
          $(DEPLOY_ENV)
  #### some later stage ####
  - stage: deploy
    displayName: deploy
    condition: |
      and(
        succeeded(),
        #Is there something I can put here to condition on tags
      )
    jobs:

谢谢

4

1 回答 1

1

据我所知,这对于 YAML 来说是不可能的,因为没有简单的方法可以在 YAML 中获取可用的标签。你可以尝试的是output variable

jobs:
- job: Foo
  steps:
  - script: |
      echo "This is job Foo."
      echo "##vso[task.setvariable variable=doThing;isOutput=true]Yes" #The variable doThing is set to true
    name: DetermineResult
- job: Bar
  dependsOn: Foo
  condition: eq(dependencies.Foo.outputs['DetermineResult.doThing'], 'Yes') #map doThing and check if true
  steps:
  - script: echo "Job Foo ran and doThing is true."

您也可以尝试使用 workaraund,在这种情况下:

  1. 在 powershell 脚本中使用 REST API 获取标签PUT https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}/tags/{tag}?api-version=5.1
  2. 然后使用日志命令将您的标签分配给输出变量
  3. 最后在条件中使用输出变量

编辑

因此,目前看来这是不可能的,但应该很快就可以使用。请检查这个GitHub 问题

现在可以在基于 YAML 的管道中跨阶段使用输出变量。这有助于您将有用的信息从一个阶段传递到下一个阶段,例如通过/不通过决策或生成输出的 ID。前一阶段的结果(状态)及其作业也是可用的。

输出变量仍然由作业内部的步骤产生。不是指dependencies.jobName.outputs['stepName.variableName'],而是指阶段 stageDependencies.stageName.jobName.outputs['stepName.variableName']。注意:默认情况下,管道中的每个阶段都依赖于 YAML 文件中它之前的阶段。因此,每个阶段都可以使用前一阶段的输出变量。您可以更改依赖关系图,这也将更改可用的输出变量。例如,如果阶段 3 需要阶段 1 的变量,则需要声明对阶段 1 的显式依赖。

我现在试了一下:

stages:
- stage: A
  jobs:
  - job: JA
    steps:
    - script: |
        echo "This is job Foo."
        echo "##vso[task.setvariable variable=doThing;isOutput=true]Yes" #The variable doThing is set to true
      name: DetermineResult

# stage B runs if A fails
- stage: B
  condition: eq(stageDependencies.A.JA.outputs['DetermineResult.doThing'], 'Yes') #map doThing and check if true
  jobs:
  - job: JB
    steps:
    - bash: echo "Hello world stage B first job"

但我收到了这个错误:

加载 YAML 构建管道时出错。无法识别的值:“stageDependencies”。位于表达式中的第 4 位:eq(stageDependencies.A.JA.outputs['DetermineResult.doThing'], 'Yes')。如需更多帮助,请参阅https://go.microsoft.com/fwlink/?linkid=842996

但是,此功能很快就会出现!

于 2020-04-29T10:09:06.283 回答