我尝试创建 Azure DevOps 管道,并且想将提交消息附加到不是从
tags
执行的每个管道运行。
我的代码的开头如下所示:
name: $(Build.SourceBranchName)
appendCommitMessageToRunName: false
这有一个技巧:
问题是,当它在
tag
上执行时,我不想附加提交消息,但我想附加任何其他分支。我尝试这样编码:
name: $(Build.SourceBranchName)
variables:
- name: appendCommitMessageToRunName
${{ if startsWith(variables['Build.SourceBranch'], 'refs/tags/') }}:
value: false
${{ if not(startsWith(variables['Build.SourceBranch'], 'refs/tags/')) }}:
value: true
但不幸的是,它不起作用。
那么如何根据源分支名称附加提交消息?
有趣。您想要的是以编程方式禁用
appendCommitMessageToRunName
参数或将 name
参数设置为 $(Build.SourceBranchName)
+ $(Build.SourceVersionMessage)
作为编译时表达式或变量。不幸的是,appendCommitMessageToRunName
不支持编译时表达式,并且$(Build.SourceVersionMessage)
变量在编译时不可用。就好像微软不希望你这样做:-)
幸运的是,有一种解决方法可以让您使用logging 命令以编程方式在运行时修改构建名称。然而,也有一些限制:
"
,/
,:
,<
,>
,\
,|
,?
,@
或*
。 以下内容可用于在运行时以编程方式调整构建名称:
name: $(Build.SourceBranchName)
appendCommitMessageToRunName: false
steps:
# adjust your build name at runtime to include $(Build.SourceVersionMessage)
- ${{ if not(startsWith( variables['Build.SourceBranch'], 'refs/tags')) }}:
- pwsh: |
# concat message
$message = "$(Build.SourceBranchName) - $(Build.SourceVersionMessage)"
# replace illegal characters
$message = $message -replace '[\"/:\<>\\\|\?\@\*]', '_'
# remove trailing '.'
$message = $message.TrimEnd('.')
# trim message length
if ($message.Length > 255)
{
$message = $message.Substring(0,255)
}
# Use logging command to update build
Write-Host "##vso[build.updateBuildNumber]$message"
displayName: 'Adjust Build Name'
# other steps
- ...