Azure Devops 中的自动拉取请求

问题描述 投票:0回答:1

Azure Devops 是否可以在推送到功能分支时自动创建对开发分支的拉取请求?

我尝试搜索 Azure Devops 中准备好的任何选项,但似乎找不到任何有用的东西。所以我认为它必须是外部的东西,但我还没有看到任何好的免费选项。

azure-devops automation pull-request
1个回答
0
投票

您可以使用 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
分支时可以自动调用,您可以按照以下步骤配置管道:

  1. 转到“项目设置”>“服务连接”以创建通用服务连接

    • 服务器 URL:
      https://dev.azure.com/{organization}/{project}
      是上述 API URI 的公共前缀。
    • 服务连接名称:服务连接的自定义名称。

    enter image description here

  2. 转到“项目设置”>“存储库”>(如果您只想为其设置安全性,请选择特定存储库)>“安全性”。确保身份“项目集合构建服务 ({组织名称})

    ”和“
    {项目名称}构建服务 ({组织名称})”的以下权限为“Allow”。

    • Read
    • Contribute
    • Contribute to pull requests

    enter image description here

  3. 使用如下配置创建 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
    分支。否则跳过。


© www.soinside.com 2019 - 2024. All rights reserved.