覆盖 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
的值
要解决:
从 yaml
中删除 createRelease
变量
编辑管道:
点击变量:
添加一个新变量并为 createRelease 变量设置默认值。将其设置为允许用户更改 queue-time:
处的值
单击确定。
或者,您可能需要考虑创建参数而不是变量:
trigger:
parameters:
- name: createRelease
displayName: 'Create a Release'
type: boolean
default: false
stages:
- stage: ...
jobs:
- job: ...
steps:
- script: 'hello'
condition: ${{ eq( parameters.createRelease, 'true') }}
我的意图是 运行 一个带有默认变量的管道。变量 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
的值
要解决:
从 yaml
中删除createRelease
变量编辑管道:
点击变量:
添加一个新变量并为 createRelease 变量设置默认值。将其设置为允许用户更改 queue-time:
处的值单击确定。
或者,您可能需要考虑创建参数而不是变量:
trigger:
parameters:
- name: createRelease
displayName: 'Create a Release'
type: boolean
default: false
stages:
- stage: ...
jobs:
- job: ...
steps:
- script: 'hello'
condition: ${{ eq( parameters.createRelease, 'true') }}