获取持续部署发布的拉取请求 ID [Azure Pipelines]
Get the pull request ID of a continuous deployment release [Azure Pipelines]
我正在尝试设置 azure 管道以在每次 PR 更新时触发构建,并在每次合并时触发发布。由于合并 PR 时的几个原因,我需要访问由 PR 的最新验证版本保存的数据。
但是要做到这一点,我需要在发布管道的 运行 期间使用 PRid。如何才能做到这一点?
在 Release Pipeline 中,您可以使用变量 $(RELEASE.ARTIFACTS.<<Source alias name>>.PULLREQUEST.ID)
来获取 Pull Request ID。
注意:Source 别名是在发布工件中设置的名称。
顺便说一下,如果您在脚本中使用默认变量,您必须先将默认变量名称中的 .
替换为 _
。
例如:$env:RELEASE_ARTIFACTS_<<Source alias name>>_PULLREQUEST_ID
这是关于 the Release variables 的文档。
希望对您有所帮助。
根据您的情况,据我所知,在您的版本中获取相关构建信息很复杂。此外,如果不涵盖所有可能的情况,可能会导致意想不到的结果。
我建议你可以参考下面的步骤:
- 删除发布 build/pipeline 工件或不必要的任务,只保留验证任务,这将节省大量时间。 (因为,一般来说,验证构建会被触发太多次,浪费太多时间发布无用的工件或其他数据)
- 创建新的构建管道并为目标分支(例如 master)启用持续集成
- 添加发布build/pipeline工件任务
- 编辑发布管道和link 这个构建管道并启用持续部署。 (可以添加额外的过滤器)
通过这种方式,在完成拉取请求后,将触发这个新的构建管道并发布必要的工件,然后触发发布。
对于拉取请求验证构建,他们只是执行任务来验证代码(例如构建项目),而不是发布工件。
节省时间的简单场景:
一个拉取请求有 50 个验证构建
- 旧方法:发布每个工件需要 1 分钟,那么总时间为 50 分钟
- 新方式:新管道做构建和发布的任务,只需要运行一次,可能只需要10分钟。
那你可以节省40分钟。
您可以从发布中检索触发构建的提交 ID。
然后在已完成的 PR 列表中搜索 commitId 并检索您的 PR 编号。
$commitId = "$(RELEASE.ARTIFACTS.{YOURARTIFACTALIAS}.SOURCEVERSION)"
$repoId = "$(RELEASE.ARTIFACTS.{YOURARTIFACTALIAS}.REPOSITORY.ID)"
$pullRequestsUri = "https://dev.azure.com/{organization}/{project}_apis/git/repositories/" + $repoId + "/pullrequests?searchCriteria.status=completed&api-version=5.1"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f "", "$(System.AccessToken)")))
$pullRequests = Invoke-RestMethod -Uri $pullRequestsUri -Method GET -ContentType "application/json" -Headers @{Authorization = "Basic $base64AuthInfo" }
foreach ($value in $pullRequests.value) {
if ($value.lastMergeCommit.commitId -eq $commitId) {
$pullRequestId = $value.pullRequestId
}
}
Write-Host $pullRequestId
我正在尝试设置 azure 管道以在每次 PR 更新时触发构建,并在每次合并时触发发布。由于合并 PR 时的几个原因,我需要访问由 PR 的最新验证版本保存的数据。
但是要做到这一点,我需要在发布管道的 运行 期间使用 PRid。如何才能做到这一点?
在 Release Pipeline 中,您可以使用变量 $(RELEASE.ARTIFACTS.<<Source alias name>>.PULLREQUEST.ID)
来获取 Pull Request ID。
注意:Source 别名是在发布工件中设置的名称。
顺便说一下,如果您在脚本中使用默认变量,您必须先将默认变量名称中的 .
替换为 _
。
例如:$env:RELEASE_ARTIFACTS_<<Source alias name>>_PULLREQUEST_ID
这是关于 the Release variables 的文档。
希望对您有所帮助。
根据您的情况,据我所知,在您的版本中获取相关构建信息很复杂。此外,如果不涵盖所有可能的情况,可能会导致意想不到的结果。
我建议你可以参考下面的步骤:
- 删除发布 build/pipeline 工件或不必要的任务,只保留验证任务,这将节省大量时间。 (因为,一般来说,验证构建会被触发太多次,浪费太多时间发布无用的工件或其他数据)
- 创建新的构建管道并为目标分支(例如 master)启用持续集成
- 添加发布build/pipeline工件任务
- 编辑发布管道和link 这个构建管道并启用持续部署。 (可以添加额外的过滤器)
通过这种方式,在完成拉取请求后,将触发这个新的构建管道并发布必要的工件,然后触发发布。
对于拉取请求验证构建,他们只是执行任务来验证代码(例如构建项目),而不是发布工件。
节省时间的简单场景:
一个拉取请求有 50 个验证构建
- 旧方法:发布每个工件需要 1 分钟,那么总时间为 50 分钟
- 新方式:新管道做构建和发布的任务,只需要运行一次,可能只需要10分钟。
那你可以节省40分钟。
您可以从发布中检索触发构建的提交 ID。 然后在已完成的 PR 列表中搜索 commitId 并检索您的 PR 编号。
$commitId = "$(RELEASE.ARTIFACTS.{YOURARTIFACTALIAS}.SOURCEVERSION)"
$repoId = "$(RELEASE.ARTIFACTS.{YOURARTIFACTALIAS}.REPOSITORY.ID)"
$pullRequestsUri = "https://dev.azure.com/{organization}/{project}_apis/git/repositories/" + $repoId + "/pullrequests?searchCriteria.status=completed&api-version=5.1"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f "", "$(System.AccessToken)")))
$pullRequests = Invoke-RestMethod -Uri $pullRequestsUri -Method GET -ContentType "application/json" -Headers @{Authorization = "Basic $base64AuthInfo" }
foreach ($value in $pullRequests.value) {
if ($value.lastMergeCommit.commitId -eq $commitId) {
$pullRequestId = $value.pullRequestId
}
}
Write-Host $pullRequestId