天蓝色的管道条件总是 returns false

azure pipeline condition always returns false

我正在尝试检查我的阶段特定变量 sourceCodeChanged 是否等于 true。 如果是 true 则应该执行该阶段,否则应该跳过该阶段。 我可以通过使用 condition 并将 sourceCodeChangedtrue 进行比较来做到这一点。然而,这对我不起作用。我做错了什么?

这是我天马行空的片段-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"