您可以在多阶段devops管道的条件语句中使用构建标记吗?

时间:2020-04-29 01:03:08

标签: azure-devops azure-pipelines multistage-pipeline

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

    ##### 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:

谢谢

1 个答案:

答案 0 :(得分: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脚本PUT https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}/tags/{tag}?api-version=5.1中使用REST API获取标签
  2. 然后使用日志记录命令将标签分配给输出变量
  3. 最后在条件中使用输出变量

编辑

因此,目前看来这还不可能,但应该很快就可以使用。请检查此GitHub issue

现在可以在基于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'],'是')。 有关更多帮助,请参阅https://go.microsoft.com/fwlink/?linkid=842996

但是,我们很快就会提供此功能!