我们可以提出并合并来自 Azure Devops 管道的拉取请求吗?

Can we raise and merge a pull request from Azure Devops pipelines?

我有一个发布分支,我通过它执行 CI/CD yaml 管道并在 AKS 上的不同环境中部署应用程序。

一旦我的 UAT 部署阶段完成,我想创建一个 Pull Request 并在没有冲突的情况下合并分支,从 release 分支到 master 分支。并且仅在 Pull Request 完成后,PROD 部署阶段应该开始。

有什么task/script可以帮助我实现目标吗?

我检查了 Create Pull Request 扩展,但目前它只支持 Windows 台机器。

我还阅读了有关 Azure DevOps REST API 创建拉取请求的内容,但有人提到 API 仅支持 2 次提交。

如有任何帮助,我们将不胜感激。

在 Linux 中,您可以使用 PowerShell core and rest API 创建 PR:

$body =  @{
             sourceRefName= "refs/heads/feature"
             targetRefName = "refs/heads/master"
             title = "PR from Pipeline"
     }

$head = @{ Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"  }
$json = ConvertTo-Json $body
$url = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/git/repositories/$(Build.Repository.Name)/pullrequests?api-version=5.0"
Invoke-RestMethod -Uri $url -Method Post -Headers $head -Body $json -ContentType application/json

你可以使用Pull Requests - Create Rest Api to create a Pull request as Shayki Abramczyk mentioned. See example.

但是,有一种更简单的方法,即在其他代理作业中使用 Create Pull Request 扩展,然后 运行 在 windows 代理上使用此作业。请参阅以下步骤:

1,在您的 UAT 部署阶段添加另一个代理作业。

2、添加创建拉取请求任务以创建拉取请求。

如果您希望 PROD 部署阶段在 Pull Request 完成时自动启动。您可以考虑在 PROD 部署阶段使用 Invoke rest api Gate。有关 Gate 的更多信息,请参阅 here。您可以参考以下步骤:

1,创建通用服务连接以连接到您的 azure devops 项目。

导航到项目设置-->服务连接-->新服务连接-->通用

服务器URL:https://dev.azure.com/OrgName/ProjName

密码:个人访问令牌

2、为 PROD 部署阶段添加一个 invoke rest api Gate。

invoke rest api Gate 将调用 Pull Requests - Get Pull Requests rest api 以获取在 UAT 阶段创建的 Pull 请求。并且只有Pull request完成后才能通过gate

URL后缀及参数:/_apis/git/repositories/{RepoId}/pullrequests?searchCriteria.sourceRefName=refs/heads/{sourceBranchName}&searchCriteria.targetRefName=refs/heads/{TargetBranchName}&$top=1&api-version=6.1-preview.1

成功条件:not(root['value'][0])

更新:

在 yaml 管道中使用上面的调用 rest api。您需要使用 deployment job 并为您的环境定义批准和检查。

有关详细信息,请参阅 approvals and checks

查看 here 了解有关环境的更多信息,

查看此线程