我们可以提出并合并来自 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 了解有关环境的更多信息,
查看此线程
我有一个发布分支,我通过它执行 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 了解有关环境的更多信息,
查看此线程