在Azure DevOps yaml中的if语句中使用stageDependencies



由于各种原因,我在Azure DevOps中有一个相当复杂的管道设置,但我现在被困在一个特殊的场景中。让我解释一下。

存在一个Stage_A, Job_A设置了一个Variable_A。现在有一个Stage_B和Job_B,需要使用Stage_A.Job_A中的Variable_A。

Job_A中的变量是这样设置的:

echo ##vso[task.setvariable variable=Variable_A;isOutput=true]$value

现在,Stage_B中的Job_B可以在

条件下访问变量
variables: 
Variable_A_FromStageA: $[stageDependencies.Stage_A.Job_A.outputs['task_A.Variable_A']]

我还可以使用

对变量执行回显
echo $(Variable_A_FromStageA)

现在的问题是,如何在if语句中使用它?我尝试了不同的方法:

- ${{ if eq($(Variable_A_FromStageA), 'True') }}:
- ${{ if eq(variables.Variable_A_FromStageA, 'True') }}:
- ${{ if eq(variables['Variable_A_FromStageA'], 'True') }}:
- ${{ if eq(stageDependencies.Stage_A.Job_A.outputs['task_A.Variable_A'], "True") }}:

实际上什么都不起作用。系统要么抱怨语法问题,要么没有正确地评估它。我真的不知道如何在yaml文件中使用if语句中的信息。文档并不是很清楚。它只提到在条件中使用阶段依赖,仅此而已。希望有人能在这里帮助我!

欢呼,弗兰克。

在Azure DevOps的if语句中使用stageDependencies

如果你想使用条件插入来使用日志命令的变量输出,那么答案是NO。

原因是条件插入需要编译时值(您必须在管道运行之前提供它们),但日志命令输出的变量是运行时。条件插入将无法获得它。

正确的方法是使用"condition"而不是"有条件插入"。使用条件可以达到你的情况。

我为你写了一个演示如下:

trigger:
- none
pool:
vmImage: ubuntu-latest
stages:
- stage: A
jobs:
- job: A1
steps:
- bash: echo "##vso[task.setvariable variable=shouldrun;isOutput=true]true"
# or on Windows:
# - script: echo ##vso[task.setvariable variable=shouldrun;isOutput=true]true
name: printvar
- stage: B
condition: and(succeeded(), eq(dependencies.A.outputs['A1.printvar.shouldrun'], 'true'))
variables:
myStageAVar: $[stageDependencies.A.A1.outputs['printvar.shouldrun']]
dependsOn: A
jobs:
- job: B1
steps:
- script: echo $(myStageAVar)

相关内容

  • 没有找到相关文章

最新更新