是否可以在稍后阶段的条件部分中使用在多阶段管道构建中设置的构建标签?
##### 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:
谢谢
答案 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:
PUT https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}/tags/{tag}?api-version=5.1
中使用REST API获取标签编辑
因此,目前看来这还不可能,但应该很快就可以使用。请检查此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
但是,我们很快就会提供此功能!