天蓝色的管道条件总是 returns false
azure pipeline condition always returns false
我正在尝试检查我的阶段特定变量 sourceCodeChanged
是否等于 true
。
如果是 true
则应该执行该阶段,否则应该跳过该阶段。
我可以通过使用 condition
并将 sourceCodeChanged
与 true
进行比较来做到这一点。然而,这对我不起作用。我做错了什么?
这是我天马行空的片段-pipelines.yml:
- stage: build
dependsOn: determineChanges
variables:
sourceCodeChanged: stageDependencies.determineChanges.checkChanges.outputs['check_changes.SOURCE_CODE_CHANGED']
condition: and(succeeded(), eq(variables.sourceCodeChanged, 'true'))
jobs:
- job: buildBinaries
displayName: Build Binaries
steps:
- bash: echo $(sourceCodechanged)
displayName: TestOutPutDeleteMe #debugging step
我实施了一个名为 TestOutPutDeleteMe
的调试步骤。当执行步骤 TestOutPutDeleteMe
时,它会打印出 true
,这意味着该值已正确分配给 sourceCodeChanged
。
如果我尝试在 eq() 函数中使用变量 sourceCodeChanged,它总是将 false 分配给条件并跳过阶段中的所有步骤。
azure pipeline condition always returns false
那是因为您在舞台级别使用了条件。请尝试使用以下条件:
- stage: build
dependsOn: determineChanges
condition: eq(Dependencies.determineChanges.outputs['checkChanges.check_changes.SOURCE_CODE_CHANGED'], 'true')
请注意,我们需要更新从 stageDependencies.stageName.jobName.outputs['stepName.variableName']
到 Dependencies.stageName.outputs['jobName.stepName.variableName']
的阶段
并且不使用变量作为值 Dependencies.determineChanges.outputs['checkChanges.check_changes.SOURCE_CODE_CHANGED']
我的测试结果:
stages:
- stage: stageA
jobs:
- job: A
pool:
name: Default
steps:
- task: PowerShell@2
displayName: "create a variable"
inputs:
targetType: 'inline'
script: |
Write-Host "##vso[task.setvariable variable=CustomVar;isOutput=true]true"
name: CustomVariable
- stage: stageB
dependsOn: stageA
condition: eq(Dependencies.stageA.outputs['A.CustomVariable.CustomVar'], 'true')
jobs:
- job: A
pool:
name: Default
steps:
- task: PowerShell@2
displayName: "output the variable"
inputs:
targetType: 'inline'
script: |
Write-Host "hello world"
我正在尝试检查我的阶段特定变量 sourceCodeChanged
是否等于 true
。
如果是 true
则应该执行该阶段,否则应该跳过该阶段。
我可以通过使用 condition
并将 sourceCodeChanged
与 true
进行比较来做到这一点。然而,这对我不起作用。我做错了什么?
这是我天马行空的片段-pipelines.yml:
- stage: build
dependsOn: determineChanges
variables:
sourceCodeChanged: stageDependencies.determineChanges.checkChanges.outputs['check_changes.SOURCE_CODE_CHANGED']
condition: and(succeeded(), eq(variables.sourceCodeChanged, 'true'))
jobs:
- job: buildBinaries
displayName: Build Binaries
steps:
- bash: echo $(sourceCodechanged)
displayName: TestOutPutDeleteMe #debugging step
我实施了一个名为 TestOutPutDeleteMe
的调试步骤。当执行步骤 TestOutPutDeleteMe
时,它会打印出 true
,这意味着该值已正确分配给 sourceCodeChanged
。
如果我尝试在 eq() 函数中使用变量 sourceCodeChanged,它总是将 false 分配给条件并跳过阶段中的所有步骤。
azure pipeline condition always returns false
那是因为您在舞台级别使用了条件。请尝试使用以下条件:
- stage: build
dependsOn: determineChanges
condition: eq(Dependencies.determineChanges.outputs['checkChanges.check_changes.SOURCE_CODE_CHANGED'], 'true')
请注意,我们需要更新从 stageDependencies.stageName.jobName.outputs['stepName.variableName']
到 Dependencies.stageName.outputs['jobName.stepName.variableName']
并且不使用变量作为值 Dependencies.determineChanges.outputs['checkChanges.check_changes.SOURCE_CODE_CHANGED']
我的测试结果:
stages:
- stage: stageA
jobs:
- job: A
pool:
name: Default
steps:
- task: PowerShell@2
displayName: "create a variable"
inputs:
targetType: 'inline'
script: |
Write-Host "##vso[task.setvariable variable=CustomVar;isOutput=true]true"
name: CustomVariable
- stage: stageB
dependsOn: stageA
condition: eq(Dependencies.stageA.outputs['A.CustomVariable.CustomVar'], 'true')
jobs:
- job: A
pool:
name: Default
steps:
- task: PowerShell@2
displayName: "output the variable"
inputs:
targetType: 'inline'
script: |
Write-Host "hello world"