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