首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据分支名称和参数选择构建配置

根据分支名称和参数选择构建配置
EN

Stack Overflow用户
提问于 2020-10-08 09:01:31
回答 1查看 1.5K关注 0票数 4

我正在使用Azure构建管道来构建DotNet应用程序。

到目前为止,此生成管道被配置为在发布模式下构建。

我想要的是根据已提交的分支选择构建配置:

  • develop分支Release模式
  • 特征分支→Debug模式

我还想覆盖这种行为,因为在触发手动构建之前,我可以选择一个参数。

这里有一个图表来展示我想要的:

下面是我的构建管道的相关YAML和我的尝试:

代码语言:javascript
复制
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://learn.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,即使我替换了由${{ false }}false分配给buildForRelease的长表达式。

我怀疑变量将被计算为字符串而不是布尔值,从而使and( variables.runsOnDevelop, variables.defaultConfigurationSelected)返回为真。

提前谢谢。

编辑:我尝试使用以下语法,但没有结果:

代码语言:javascript
复制
  - 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'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-09 03:34:25

更新的语法是正确的。

只是我在你更新的语法中发现了一个小错误。您将表达式误认为是buildForRelease的值。第二个variables.debugConfigurationSelected应该是variables.releaseConfigurationSelected

在我把它改成variables.releaseConfigurationSelected之后。效果很好。

代码语言:javascript
复制
 - 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'
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64259155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档