当分支名称与 refs/tags 不同时,Azure DevOps 附加提交消息

问题描述 投票:0回答:1

我尝试创建 Azure DevOps 管道,并且想将提交消息附加到不是从

tags
执行的每个管道运行。

我的代码的开头如下所示:

name: $(Build.SourceBranchName)
appendCommitMessageToRunName: false

这有一个技巧:

enter image description here

问题是,当它在

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

但不幸的是,它不起作用。

那么如何根据源分支名称附加提交消息?

git azure-devops azure-pipelines cicd
1个回答
0
投票

有趣。您想要的是以编程方式禁用

appendCommitMessageToRunName
参数或将
name
参数设置为
$(Build.SourceBranchName)
+
$(Build.SourceVersionMessage)
作为编译时表达式或变量。不幸的是,
appendCommitMessageToRunName
不支持编译时表达式,并且
$(Build.SourceVersionMessage)
变量在编译时不可用。就好像微软不希望你这样做:-)

幸运的是,有一种解决方法可以让您使用logging 命令以编程方式在运行时修改构建名称。然而,也有一些限制:

  • 内部版本号不能超过 255 个字符
  • 它不能包含这些字符中的任何一个:
    "
    /
    :
    <
    >
    \
    |
    ?
    @
    *

以下内容可用于在运行时以编程方式调整构建名称:

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
- ...
© www.soinside.com 2019 - 2024. All rights reserved.