我正在使用Azure DevOps构建管道,但我希望更改构建名称。根据{{3}},这完全有可能。
考虑到这一点,我测试了以下有效的方法。到目前为止一切顺利...
name: '1.0.$(Rev:r)-$(Build.SourceBranchName)'
1.0.1-master
但是,我的要求之一是排除分支名称(如果它是“ 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)'
此后,我按照documentation中所述尝试了${{ variables.Build.SourceBranchName }}
和$[variables.Build.SourceBranchName]
,但是在编写时,它们要么被忽略,要么返回空字符串。这三种格式为我提供了以下构建名称。
1.0.1-$(Build.SourceBranchName)
1.0.1-
1.0.1-$ [variables.Build.SourceBranchName]
围绕自定义命名的documentation提到了变量$(SourceBranchName)
,但是我已经尝试过了,但是它也失败了。
我感到困惑的是,variables:
段中的表达式可以访问变量值documentation,但似乎variables:
段本身无法访问。
是否可以有条件地命名构建,以便我可以根据需要包括/排除分支名称?
答案 0 :(得分:2)
问题是您如何在解析时间表达式中引用$(Build.SourceBranchName)。在上下文中,该格式不可用。其他info here
这对我有用!
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。
答案 1 :(得分:1)
是否可以有条件地命名构建,以便我可以 是否根据需要包含/排除分支名称?
另一种解决方法是使用PowerShell task更新内部版本号。选中this official document:
您可以使用##vso[build.updatebuildnumber]my-new-build-number
之类的东西。
示例:
name: 1.0.$(Rev:r)
steps:
- task: PowerShell@2
condition: and(succeeded(), ne(variables['Build.SourceBranchName'], 'master'))
inputs:
targetType: 'inline'
script: |
$buildNumber = $Env:BUILD_BUILDNUMBER
$revision= $buildNumber.Substring($buildNumber.LastIndexOf('.') + 1)
Write-Host "##vso[build.updatebuildnumber]1.0.$revision-$(Build.SourceBranchName)"
将此复制到您的Yaml中,然后它就可以满足您上面的要求。关于如何在任务中使用$(rev:r)
,感谢 Shayki Abramczyk !
希望以上所有都对您有帮助:)