首页 > 解决方案 > 有条件地在 Azure DevOps 生成名称中包含分支名称

问题描述

我正在使用 Azure DevOps 构建管道,但我希望更改构建的名称。根据文档,这是完全可能的。

考虑到这一点,我测试了以下内容,它有效。到目前为止,一切都很好...

name: '1.0.$(Rev:r)-$(Build.SourceBranchName)'

1.0.1-master

但是,我的要求之一是排除分支名称(如果它是“主”),因此我尝试了以下操作。这似乎在第一个实例中起作用,因为“master”没有附加分支名称,但是当我运行一个特性分支时,我发现它$(Build.SourceBranchName)没有被扩展。

variables:
  ${{ if eq(variables['Build.SourceBranchName'], 'master') }}:
    branchName: ''
  ${{ if ne(variables['Build.SourceBranchName'], 'master') }}:
    branchName: '-$(Build.SourceBranchName)'

name: '1.0.$(Rev:r)$(branchName)'

我已经尝试过${{ variables.Build.SourceBranchName }},并且$[variables.Build.SourceBranchName]按照文档中的描述,但正如所写的那样,它们的令牌要么被忽略,要么返回一个空字符串。这三种格式给我留下了以下构建名称。

1.0.1-$(Build.SourceBranchName)
1.0.1-
1.0.1-$[variables.Build.SourceBranchName]

关于自定义命名的文档提到了一个变量$(SourceBranchName),但我已经尝试过了,它也失败了。

我感到困惑的是,段中的表达式可以访问此处描述variables:的变量值,但似乎段本身无法访问。variables:

是否可以有条件地命名构建,以便我可以根据需要包含/排除分支名称?

标签: azure-devopsexpression

解决方案


问题是您如何在解析时间表达式中引用 $(Build.SourceBranchName) 。它在上下文中以该格式不可用。附加信息在这里

这对我有用!

variables:
  system.debug: true
  ${{ if eq(variables['Build.SourceBranchName'], 'master') }}:
    branchName: ''
  ${{ if ne( variables['Build.SourceBranchName'], 'master') }}:
    branchName: -${{ variables['Build.SourceBranchName'] }}

name: '1.0.$(Rev:r)$(branchName)'

Lance 的答案中的一些很好的附加信息##vso[build.updatebuildnumber]可能是一个很好的路径,或者您可以使用 GitVersion。


推荐阅读