根据分支名称和参数选择构建配置
Choose build configuration according to branch name & parameter
我正在使用 Azure 构建管道构建 DotNet 应用程序。
到目前为止,此构建管道配置为在发布模式下构建。
我想要的是 select 构建配置取决于已推送提交的分支:
develop
分支→Release
模式
- 特征分支→
Debug
模式
由于我可以在触发手动构建之前选择一个参数,因此我也想覆盖此行为。
这是一张图表来展示我想要的:
这是我的构建管道和尝试的相关 YAML:
parameters:
- name: buildConfiguration
displayName: Build Configuration
default: Default
values:
- Default
- Release
- Debug
variables:
- name: runsOnDevelop
value: ${{ eq( variables['Build.SourceBranch'], 'refs/heads/develop') }}
- name: defaultConfigurationSelected
value: ${{ eq(parameters['buildConfiguration'], 'Default') }}
- name: releaseConfigurationSelected
value: ${{ eq(parameters['buildConfiguration'], 'Release') }}
- name: buildForRelease
value: ${{ or(and( variables.runsOnDevelop, variables.defaultConfigurationSelected), variables.releaseConfigurationSelected )}}
#value: $[ or(and( variables.runsOnDevelop, variables.defaultConfigurationSelected), variables.releaseConfigurationSelected )] # same result
- name: buildConfiguration
${{ if variables.buildForRelease }}: # Conditional insertion: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/expressions?view=azure-devops#conditional-insertion
value: 'Release'
${{ if not(variables.buildForRelease) }}:
value: 'Debug'
steps:
- task: Bash@3
inputs:
targetType: 'inline'
script: 'env | sort'
- task: DotNetCoreCLI@2
displayName: 'Build (${{ variables.buildConfiguration }})'
condition:
inputs:
command: build
arguments: '--configuration ${{ variables.buildConfiguration }} -p:Version=$(Version)'
- task: DotNetCoreCLI@2
displayName: 'Run Tests'
inputs:
command: test
arguments: '--configuration ${{ variables.buildConfiguration }}'
env | inline
的输出显示 buildConfiguration
始终是 Release
,即使我将分配给 buildForRelease
的长表达式替换为 ${{ false }}
或false
.
我怀疑变量被评估为字符串而不是布尔值,使得 and( variables.runsOnDevelop, variables.defaultConfigurationSelected)
return 为真。
提前致谢。
编辑:我尝试使用以下语法,但没有成功:
- name: buildForRelease
value: ${{ or(
and(
eq(variables.runsOnDevelop, True),
eq(variables.defaultConfigurationSelected, True)
),
eq(variables.debugConfigurationSelected, True)
) }}
- name: buildConfiguration
${{ if eq(variables.buildForRelease, True) }}:
value: 'Release'
${{ if ne(variables.buildForRelease, True) }}:
value: 'Debug'
您更新后的语法是正确的。
我只是在您更新的语法中发现了一个小错误。您弄错了 buildForRelease
值的表达式。第二个 variables.debugConfigurationSelected
应该是 variables.releaseConfigurationSelected
我把它改成variables.releaseConfigurationSelected
之后。效果很好。
- name: buildForRelease
value: ${{ or(
and(
eq(variables.runsOnDevelop, True),
eq(variables.defaultConfigurationSelected, True)
),
eq(variables.releaseConfigurationSelected, True)
) }}
- name: buildConfiguration
${{ if eq(variables.buildForRelease, True) }}:
value: 'Release'
${{ if ne(variables.buildForRelease, True) }}:
value: 'Debug'
我正在使用 Azure 构建管道构建 DotNet 应用程序。
到目前为止,此构建管道配置为在发布模式下构建。
我想要的是 select 构建配置取决于已推送提交的分支:
develop
分支→Release
模式- 特征分支→
Debug
模式
由于我可以在触发手动构建之前选择一个参数,因此我也想覆盖此行为。
这是一张图表来展示我想要的:
这是我的构建管道和尝试的相关 YAML:
parameters:
- name: buildConfiguration
displayName: Build Configuration
default: Default
values:
- Default
- Release
- Debug
variables:
- name: runsOnDevelop
value: ${{ eq( variables['Build.SourceBranch'], 'refs/heads/develop') }}
- name: defaultConfigurationSelected
value: ${{ eq(parameters['buildConfiguration'], 'Default') }}
- name: releaseConfigurationSelected
value: ${{ eq(parameters['buildConfiguration'], 'Release') }}
- name: buildForRelease
value: ${{ or(and( variables.runsOnDevelop, variables.defaultConfigurationSelected), variables.releaseConfigurationSelected )}}
#value: $[ or(and( variables.runsOnDevelop, variables.defaultConfigurationSelected), variables.releaseConfigurationSelected )] # same result
- name: buildConfiguration
${{ if variables.buildForRelease }}: # Conditional insertion: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/expressions?view=azure-devops#conditional-insertion
value: 'Release'
${{ if not(variables.buildForRelease) }}:
value: 'Debug'
steps:
- task: Bash@3
inputs:
targetType: 'inline'
script: 'env | sort'
- task: DotNetCoreCLI@2
displayName: 'Build (${{ variables.buildConfiguration }})'
condition:
inputs:
command: build
arguments: '--configuration ${{ variables.buildConfiguration }} -p:Version=$(Version)'
- task: DotNetCoreCLI@2
displayName: 'Run Tests'
inputs:
command: test
arguments: '--configuration ${{ variables.buildConfiguration }}'
env | inline
的输出显示 buildConfiguration
始终是 Release
,即使我将分配给 buildForRelease
的长表达式替换为 ${{ false }}
或false
.
我怀疑变量被评估为字符串而不是布尔值,使得 and( variables.runsOnDevelop, variables.defaultConfigurationSelected)
return 为真。
提前致谢。
编辑:我尝试使用以下语法,但没有成功:
- name: buildForRelease
value: ${{ or(
and(
eq(variables.runsOnDevelop, True),
eq(variables.defaultConfigurationSelected, True)
),
eq(variables.debugConfigurationSelected, True)
) }}
- name: buildConfiguration
${{ if eq(variables.buildForRelease, True) }}:
value: 'Release'
${{ if ne(variables.buildForRelease, True) }}:
value: 'Debug'
您更新后的语法是正确的。
我只是在您更新的语法中发现了一个小错误。您弄错了 buildForRelease
值的表达式。第二个 variables.debugConfigurationSelected
应该是 variables.releaseConfigurationSelected
我把它改成variables.releaseConfigurationSelected
之后。效果很好。
- name: buildForRelease
value: ${{ or(
and(
eq(variables.runsOnDevelop, True),
eq(variables.defaultConfigurationSelected, True)
),
eq(variables.releaseConfigurationSelected, True)
) }}
- name: buildConfiguration
${{ if eq(variables.buildForRelease, True) }}:
value: 'Release'
${{ if ne(variables.buildForRelease, True) }}:
value: 'Debug'