覆盖 Azure Yaml 管道中的变量不起作用

Overwrite Variable in Azure Yaml Pipeline not working

我的意图是 运行 一个带有默认变量的管道。变量 createRelease 应该指示除 `TestApplication.

之外哪个作业应该 运行

在伪代码中:

RunJob('TestApplication')

if(!createRelease) 
    RunJob('BuildForDev')

if(createRelease)
    RunJob('BuildForUatRelease')

它不会覆盖 createRelease 的值。谁知道为什么不呢?

我的管道 yaml 看起来像:

trigger:
- main
- feature/*

pool:
  vmImage: ubuntu-latest

variables:  
  - name: createRelease
    value: false

stages:
  - stage: CI_Build
    displayName: Build and Test App
    jobs:
      - job: TestApplication
        displayName: Building and testing
        condition: always()
        steps:
          - task: Bash@3
            displayName: Maven Test Application
            inputs:
              targetType: 'inline'
              script: |
                echo 'mvn test'
      - job: BuildForDev
        displayName: Build Application for Develop
        dependsOn: TestApplication
        condition: |
          and(
            succeeded('TestApplication'),
            eq(variables['Build.SourceBranchName'], 'main'),
            eq(variables.createRelease, 'false')
          )
        steps:
          - task: Bash@3
            displayName: Maven test Application
            inputs:
              targetType: 'inline'
              script: |
                echo mvn test
      - job: BuildForUatRelease
        displayName: Release Application
        dependsOn: TestApplication
        condition: |
          and(
            succeeded('TestApplication'),
            eq(variables['Build.SourceBranchName'], 'main'),
            eq(variables.createRelease, 'true')
          )
        steps:
          - task: Bash@3
            displayName: Set Git Credentials
            inputs:
              targetType: 'inline'
              script: |
                echo 'mvn release prepare'

管道中可被覆盖的变量定义:

我如何在 运行 之前设置 createRelease:

您正在为 YAML 中的变量分配值,该值将优先于队列时定义的变量。这样想可能会有所帮助:

  • 您使用 createRelease: True 变量对管道进行排队
  • Azure DevOps 为管道创建执行上下文并执行您的 pipeline.yml
  • 您的管道定义了 createRelease: False
  • 的值

要解决:

  1. 从 yaml

    中删除 createRelease 变量
  2. 编辑管道:

  3. 点击变量:

  4. 添加一个新变量并为 createRelease 变量设置默认值。将其设置为允许用户更改 queue-time:

    处的值

  5. 单击确定。

或者,您可能需要考虑创建参数而不是变量:

trigger:

parameters:
- name: createRelease
  displayName: 'Create a Release'
  type: boolean
  default: false

stages:
- stage: ...
  jobs:
  - job: ...
    steps:
    - script: 'hello'
      condition: ${{ eq( parameters.createRelease, 'true') }}