AzureDevOps 构建/发布管道 - 获取 git 提交消息(构建标题)?

Det*_*ail 6 azure-devops

我有一个在我的发布管道上部署后运行的 webhook 任务,目前它只是推送一条消息来说明已部署新版本,但我想在其中包含 git commit 消息以准确显示已部署的内容被部署。我不太确定如何检索它,但我希望这是可能的,因为构建最初是从 git push 触发的,而且根据此屏幕截图,构建标题以此消息命名: 在此处输入图片说明

Ter*_*rje 5

这有点棘手,因为发布管道通常不像构建管道那样具有 Git 访问权限。除此之外,不可能跨管道共享变量,这本来是一个简单的解决方案。

这是我如何做到的:

首先,将 Bash 脚本任务添加到您的构建管道,将您的最后提交消息导出到文件:

CHANGES=`git log -1 --pretty=%B`
mkdir -p $(Build.artifactStagingDirectory)/exported
echo "$CHANGES" > $(Build.artifactStagingDirectory)/exported/CHANGES
Run Code Online (Sandbox Code Playgroud)

确保使用发布构建工件任务将此文件夹作为构建中的工件发布

发布路径: $(Build.ArtifactStagingDirectory)/exported

神器名称: exported

其次,向您的发布管道添加一个 Bash 脚本任务,该任务从文件中获取这些更改并将它们存储在一个变量中:

CHANGES=$(cat $(System.DefaultWorkingDirectory)/Development/exported/CHANGES)
echo "##vso[task.setvariable variable=commitComment]$CHANGES"
Run Code Online (Sandbox Code Playgroud)

最后的 Git 更改现在可作为变量在您的构建管道中使用$commitComment

注意:您上面的确切路径可能会有所不同。


Det*_*ail 4

好吧,我已经找到了一种方法,不确定这是否是最好的方法,所以让我知道是否可以以不同的方式完成......

我在发布管道中使用了 Powershell 任务,该任务查询 Azure REST API 并调用 Git,如下所示:

$webClient = New-Object Net.WebClient
$token = "Bearer $env:SYSTEM_ACCESSTOKEN"
$headers = @{ Authorization = $token }

$baseUrl = "https://dev.azure.com/<your company>/<your project>/_apis/git/repositories/<your repo Id>/commits"
$request = "$baseUrl/$env:RELEASE_ARTIFACTS_<your repo name>_SOURCEVERSION"
Write-Host "Request: $request"

$response = Invoke-WebRequest -Uri $request -Headers $headers
$json = ($response | ConvertFrom-Json)
$comment = $json.comment
Write-Host "Response: $comment"

Write-Host "##vso[task.setvariable variable=commitComment;]$comment"
Run Code Online (Sandbox Code Playgroud)

要查找我上面标记的参数的值,请遵循以下指南:https: //learn.microsoft.com/en-us/azure/devops/pipelines/release/variables ?view=azure-devops&tabs=powershell#查看所有变量的当前值

这将写入我创建的名为“commitComment”的自定义管道变量,然后我在发现的市场任务中使用该变量来生成不和谐的 Webhook 请求。

或者,您可以直接从 Powershell 调用它。希望这可以帮助任何想要做同样事情的人。

在此输入图像描述

在此输入图像描述

  • `$(Build.SourceVersionMessage)` 不会达到同样的效果吗? (2认同)