Azure Pipeline DevOps 中的条件默认值

Ole*_*ers 3 azure-devops azure-pipelines azure-pipelines-yaml

我使用 Azure Pipelines 来构建我的解决方案。手动构建时,用户可以决定使用哪个构建配置。现在我希望默认值(以及自动触发时的值)根据分支而不同。这是我的(非工作)方法:

name:   PR-$(Build.SourceBranchName)-$(Date:yyyyMMdd)$(Rev:.r)
trigger:
  - develop
  - test 
  - master
pool:
  vmImage: 'windows-latest'
parameters:
- name: BuildConfiguration
  displayName: Build Configuration
  ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/develop') }}:
  default: Debug
  ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/test') }}:
  default: Release
  ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/master') }}:
  default: Release
  values:
  - Debug
  - Release
Run Code Online (Sandbox Code Playgroud)

条件部分 ( ${{...}) 根本不起作用。(* "A template expression is not allowed in this context")

还有其他方法可以实现这一点吗?

Krz*_*tof 10

无法使用表达式来选择参数的默认值。

参数 alco 不能是可选的:

参数必须包含名称和数据类型。参数不能是可选的。需要在 YAML 文件中或运行管道时分配默认值。如果您不指定默认值或将默认值设置为 false,则将使用第一个可用值。

您可以做的是使用参数和变量:

name:   PR-$(Build.SourceBranchName)-$(Date:yyyyMMdd)$(Rev:.r)
trigger:
  - develop
  - test 
  - master
pool:
  vmImage: 'windows-latest'
parameters:
- name: BuildConfiguration
  displayName: Build Configuration
  default: Default
  values:
  - Debug
  - Release
  - Default

variables:
- name: buildConfiguration
  ${{ if and(eq(variables['Build.SourceBranch'], 'refs/heads/develop'), eq(parameters.BuildConfiguration, 'Default')) }}:
    value: Debug
  ${{ elseif and(eq(variables['Build.SourceBranch'], 'refs/heads/test'), eq(parameters.BuildConfiguration, 'Default')) }}:
    value: Release
  ${{ elseif and(eq(variables['Build.SourceBranch'], 'refs/heads/master'), eq(parameters.BuildConfiguration, 'Default')) }}:
    value: Release
  ${{ else }}:
    value: ${{parameters.BuildConfiguration}}


steps:
- script: |
    echo $(buildConfiguration)
    echo $(Build.SourceBranch)
Run Code Online (Sandbox Code Playgroud)