获取连续部署版本的拉取请求ID [Azure Pipelines]

时间:2020-05-15 13:26:19

标签: azure triggers continuous-integration azure-pipelines continuous-deployment

我正在尝试设置azure管道以触发每次PR更新的构建,以及每次合并的发布。合并PR时有几个原因,我需要访问PR的最新验证版本保存的数据。

但是,在发布管道运行期间,我需要PRid。一个人怎么能做到这一点?

3 个答案:

答案 0 :(得分:1)

在发布管道中,您可以使用变量$(RELEASE.ARTIFACTS.<<Source alias name>>.PULLREQUEST.ID)获取请求请求ID。

Release Variables

注意:Source别名是在发布工件中设置的名称。

Source alias

顺便说一句,如果您在脚本中使用默认变量,则必须首先用.替换默认变量名称中的_

例如:$env:RELEASE_ARTIFACTS_<<Source alias name>>_PULLREQUEST_ID

这是有关the Release variables的文档。

希望这会有所帮助。

答案 1 :(得分:1)

根据您的情况,据我所知,在您的发行版中获取相关的构建信息很复杂。此外,如果未涵盖所有可能的情况,可能会导致意外结果。

我建议您可以参考以下步骤:

  1. 删除发布的发布/构建工件或不必要的任务,仅保留待验证的任务,这将节省大量时间。 (因为通常,验证构建将被触发太多次,浪费太多时间来发布无用的工件或其他数据)
  2. 创建新的构建管道并为目标分支(例如master)启用持续集成
  3. 添加发布构建/管道工件任务
  4. 编辑发布管道并链接此构建管道并启用持续部署。 (可以添加其他过滤器)

通过这种方式,在完成拉取请求之后,将触发此新的构建管道并发布必要的工件,然后将触发发行版。

对于请求请求验证构建,他们只是执行验证代码的任务(例如,构建项目),而不发布工件。

节省时间的简单方案:

拉取请求具有50个验证版本

  • 老方法:每次发布工件需要1分钟,然后总时间为50分钟
  • 新方法:新管道执行构建和发布任务,它只运行一次,可能只需要10分钟。

然后您可以节省40分钟。

答案 2 :(得分:1)

您可以从发行版中检索触发构建的提交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