如何在Azure Pipelines的步骤中使用变量作为条件?

2024-01-10

Azure Pipelines 定义了在不同管道任务、步骤等中使用的变量和条件。定义以下 YAML 管道时,步骤ReleaseOnlyScript仅应在变量评估组合条件时执行isValidReleaseBuild is true。在 Azure Pipeline DevOps 站点中,变量BuildType被定义并设置为release.

variables:
  - name: isValidReleaseBuild
    value: $[and(eq(variables['BuildType'], 'release'), startsWith(variables['Build.SourceBranch'], 'refs/tags/v'))]

steps:
  - script: |
      echo "BuildType: $(BuildType)"
      echo "SourceBranch: $(Build.SourceBranch)"
      echo "ReleaseBuild: $(isValidReleaseBuild)"
    displayName: 'Buildinfo'
  - ${{ if eq(variables['isValidReleaseBuild'], true) }}:
    - script: |
        echo "YEAH its a Release!"
      displayName: 'ReleaseOnlyScript'

运行管道时,只有脚本BuildInfo执行时输出如下。

BuildType: release
SourceBranch: refs/tags/v1.0.0
ReleaseBuild: True

为什么是ReleaseOnlyScript没有被执行?

Update: Thx to Alex AIT https://stackoverflow.com/a/60728480/13078117的回答,我按如下方式修改了管道,它现在按预期工作。

variables:
  - name: isValidReleaseBuild
    value: $[and(eq(variables['BuildType'], 'release'), startsWith(variables['Build.SourceBranch'], 'refs/tags/v'))]

jobs:
  - job: check_cicd
    steps:
      - script: |
          echo "BuildType: $(BuildType)"
          echo "SourceBranch: $(Build.SourceBranch)"
          echo "ReleaseBuild: $(isValidReleaseBuild)"
          if [ "$(isValidReleaseBuild)" = "True" ]; then
            echo "##vso[task.setvariable variable=ValidBuild;isOutput=true]True"
          else
            echo "##vso[task.setvariable variable=ValidBuild;isOutput=true]False"
          fi
        name: buildinfo
  - job: release_cicd
    dependsOn: check_cicd
    condition: eq(dependencies.check_cicd.outputs['buildinfo.ValidBuild'], 'True')
    steps:
      - template: build-release.yml

你必须使用condition在你的脚步之内,而不是一开始的表情。

parameters:
  doThing: false

steps:
- script: echo I did a thing
  condition: and(succeeded(), eq('${{ parameters.doThing }}', true))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Azure Pipelines的步骤中使用变量作为条件? 的相关文章

随机推荐