Azure Devops 是否可以在推送到功能分支时自动创建对开发分支的拉取请求?
我尝试搜索 Azure Devops 中准备好的任何选项,但似乎找不到任何有用的东西。所以我认为它必须是外部的东西,但我还没有看到任何好的免费选项。
您可以使用 Azure DevOps REST API“拉取请求 - 获取拉取请求”来检查是否存在用于将更改从
feature
合并到 development
分支的活动 PR。
GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repository}/pullrequests?searchCriteria.sourceRefName=refs/heads/feature&searchCriteria.targetRefName=refs/heads/development&searchCriteria.status=active&api-version=7.1
将
{organization}
、{project}
和 {repository}
替换为 Azure DevOps 组织、项目和 git 存储库的实际名称。后续步骤相同。
如果不存在此类活动 PR,请调用 API“Pull Requests - Create”创建一个新 PR,用于合并从
feature
到 development
分支的更改。
POST https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repository}/pullrequests?api-version=7.1
{
"sourceRefName": "refs/heads/feature",
"targetRefName": "refs/heads/development",
"title": "Merge changes",
"description": "Merge some changes from refs/heads/feature to refs/heads/development.",
"isDraft": false
}
为了让上述 API 在有新更改推送到
feature
分支时可以自动调用,您可以按照以下步骤配置管道:
转到“项目设置”>“服务连接”以创建通用服务连接。
https://dev.azure.com/{organization}/{project}
是上述 API URI 的公共前缀。转到“项目设置”>“存储库”>(如果您只想为其设置安全性,请选择特定存储库)>“安全性”。确保身份“项目集合构建服务 ({组织名称})
”和“{项目名称}构建服务 ({组织名称})”的以下权限为“
Allow
”。
Read
Contribute
Contribute to pull requests
使用如下配置创建 YAML 管道。确保 YAML 文件
auto-create-pr.yml
存在于 feature
分支上。
# auto-create-pr.yml
trigger:
branches:
include:
- feature
jobs:
- job: createPR
pool: server
steps:
- task: InvokeRESTAPI@1
displayName: 'Check Active PR'
inputs:
connectionType: connectedServiceName
serviceConnection: 'ForGitAPI'
method: 'GET'
headers: |
{
"Authorization": "Bearer $(system.AccessToken)"
}
urlSuffix: '/_apis/git/repositories/{repository}/pullrequests?searchCriteria.sourceRefName=refs/heads/feature&searchCriteria.targetRefName=refs/heads/development&searchCriteria.status=active&api-version=7.1'
successCriteria: 'ge(root[''count''], 1)'
- task: InvokeRESTAPI@1
displayName: 'Create PR'
condition: failed()
inputs:
connectionType: connectedServiceName
serviceConnection: 'ForGitAPI'
method: 'POST'
headers: |
{
"Content-Type":"application/json",
"Authorization": "Bearer $(system.AccessToken)"
}
body: |
{
"sourceRefName": "refs/heads/feature",
"targetRefName": "refs/heads/development",
"title": "Merge changes",
"description": "Merge some changes from refs/heads/feature to refs/heads/development.",
"isDraft": false
}
urlSuffix: '/_apis/git/repositories/{repository}/pullrequests?api-version=7.1'
通过上述配置,当新更改推送到
feature
分支时,会自动触发管道。
步骤“
Check Active PR
”调用 API“Pull Requests - Get Pull Requests”来检查是否有活动 PR 用于将更改从 feature
合并到 development
分支。如果不存在,则此步骤失败。否则成功。
如果步骤'
Check Active PR
'失败,执行步骤'Create PR
'调用API“Pull Requests - Create”创建一个PR,用于合并从feature
到development
分支。否则跳过。