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

时间:2019-08-26 18:54:09

标签: azure-devops

我有一个webhook任务,该任务在发布管道上进行部署后运行,当前它只是推送一条消息,说明已经部署了新版本,但是我也想在其中包括git commit消息以显示确切地部署了什么。我不太确定如何检索它,但是我希望这是可能的,因为最初是通过git push触发构建的,此外,按照以下屏幕快照,该构建标题也用以下消息命名: enter image description here

3 个答案:

答案 0 :(得分:4)

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

这是我的操作方式:

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

elasticsearch.hosts: ["https://192.168.1.1:9200", "https://192.168.1.2:9200", "https://192.168.1.3:9200", "https://192.168.1.4:9200"]

确保使用以下方式在您的构建中将该文件夹发布为工件 发布构建工件任务:

发布路径: CHANGES=`git log -1 --pretty=%B` mkdir -p $(Build.artifactStagingDirectory)/exported echo "$CHANGES" > $(Build.artifactStagingDirectory)/exported/CHANGES

工件名称: $(Build.ArtifactStagingDirectory)/exported

第二,将Bash脚本任务添加到您的发布管道中 文件中的这些更改并将其存储在变量中:

exported

最近的Git更改现在可以在构建管道中用作变量CHANGES=$(cat $(System.DefaultWorkingDirectory)/Development/exported/CHANGES) echo "##vso[task.setvariable variable=commitComment]$CHANGES"

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

答案 1 :(得分:1)

好吧,我想出了一种方法,不确定这是否是最好的方法,所以请让我知道是否可以用其他方法完成...

我在Release管道中使用了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"

要找出我上面标记的参数的值,请遵循以下指南: https://docs.microsoft.com/en-us/azure/devops/pipelines/release/variables?view=azure-devops&tabs=powershell#view-the-current-values-of-all-variables

这将写入我创建的自定义管道变量“ commitComment”,然后将其用于发现不和谐的Webhook请求的市场任务中。

或者,您可以直接从Powershell调用它。 希望这对希望这样做的人有所帮助。

enter image description here

enter image description here

答案 2 :(得分:1)

更新版本:json响应不仅包含最后的提交,而且还包含最近的100个提交的集合。您将需要访问集合中的第一个提交(按日期DESC排序)。此外,可以动态检索所有,以提高可重用性:

$webClient = New-Object Net.WebClient

$token = "Bearer $env:SYSTEM_ACCESSTOKEN"
$headers = @{ Authorization = $token }

$devOpsUrl = "$(System.TeamFoundationCollectionUri)"
$projectName = "$(System.TeamProject)"
$repoId = "$(Build.Repository.Id)"
$repoName = "$(Build.Repository.Name)"

$baseUrl = "$devOpsUrl$projectName/_apis/git/repositories/$repoId/commits"
$request = "$baseUrl/$env:RELEASE_ARTIFACTS_$repoName_SOURCEVERSION"

Write-Host "Request: $request"

$response = Invoke-WebRequest -Uri $request -Headers $headers

$json = ($response | ConvertFrom-Json)
$lastCommit = $json.value[0]

Write-Host "Last Commit: $lastCommit"

$comment = $lastCommit.comment
Write-Host "Comment: $comment"
Write-Host "##vso[task.setvariable variable=CommitMessage;]$comment"