在azure管道yaml中获取合并的分支名称

时间:2020-08-15 18:49:33

标签: azure-devops bitbucket

在将功能分支合并到dev分支时,我想在为dev分支触发的构建中的azure-pipeline.yaml中获取合并的分支名称。

这可能吗?

或者当分支在我的仓库中被删除时,我可以启动一个包含删除分支名称的构建吗?

2 个答案:

答案 0 :(得分:1)

如果我正确遵循,则说明您正在完成将功能分支(源分支)合并到开发分支(目标分支)的拉取请求,这将触发在develop分支上进行构建。在生成的版本中,您要获取功能分支的名称吗?也许功能分支遵循了一个您希望继承的重要命名约定。

您确实在$(Build.SourceVersion)变量中拥有可用的提交ID,因此您应该能够使用BitBucket REST API来获取提交信息。 commit details endpoint可以识别提交的请求请求,因此您应该可以从那里获取源分支信息。

/2.0/repositories/{workspace}/{repo_slug}/commit/{commit}/pullrequests

您还应该能够使用$(Build.SourceVersionMessage)获取提交消息

关于在删除分支时触发构建,YAML语法中没有任何本机触发,但是您可以定义使用webhook trigger的触发。当删除分支时,BitBucket似乎没有公开事件。

答案 1 :(得分:1)

在BitBucket存储库中,当尝试将feature1合并到dev分支中时,它提供默认提交消息

Merged in feature1 (pull request #{PullRequestNumber})

我们可以通过预定义变量$(Build.SourceVersionMessage)访问此消息。我们可以使用Powershell task输出合并的分支名称,甚至可以使用PS任务在脚本中设置变量,以便后续步骤也可以访问该值。这是我的工作脚本:

steps:
- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: |
      $SourceVersionMessage = "$(Build.SourceVersionMessage)"
      $SourceBranchName = $SourceVersionMessage.split(" ")[2]

      #Output the Merged Branch Name
      Write-Host $SourceBranchName

      #Set the  `MergedBranchName` variable so that following steps can access the Merged Branch Name
      Write-Host "##vso[task.setvariable variable=MergedBranchName]$SourceBranchName"
      
- script: |
    echo $(MergedBranchName)

以下步骤可以成功访问该值:

enter image description here