【问题标题】:How can I create a Pull Request when a release completes in Azure DevOps?在 Azure DevOps 中完成发布后,如何创建拉取请求?
【发布时间】:2018-07-16 00:07:14
【问题描述】:

我正在处理的一个项目有 2 个长期存在的功能分支以及主分支。

为了完全自动化部署,我想在部署从 Azure DevOps 版本结束时创建一个从 master 到这两个功能分支的拉取请求。

Azure DevOps 中的哪种工具可以让我创建拉取请求作为发布任务?

【问题讨论】:

    标签: git azure-devops azure-pipelines pull-request azure-pipelines-release-pipeline


    【解决方案1】:

    发布期间可以通过Pull Request REST API创建Pull Request。

    Invoke HTTP REST API task,但可能不符合您的要求。

    简单的方法就是你可以通过PowerShell task来完成:

    1. 选择阶段(例如在代理上运行)并选中允许脚本访问 OAuth 令牌选项。你也可以使用Personal Access Token
    2. 添加 PowerShell 任务

    简单示例:

    param(
    [string]$project,
    [string]$repo,
    [string]$sourceBranch,
    [string]$targetBranch,
    [string]$title,
    [string]$des,
    [string]$token
    )
    $bodyObj=@{
      "sourceRefName"="refs/heads/$sourceBranch";
      "targetRefName"= "refs/heads/$targetBranch";
      "title"= "$title";
      "description"="$des";
    }
    $bodyJson=$bodyObj| ConvertTo-Json
    $uri="https://XXX.visualstudio.com/DefaultCollection/$project/_apis/git/repositories/$repo/pullRequests?api-version=3.0"
    Write-Output $bodyJson
    Write-Output $uri
    $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f "test",$token)))
    $result= Invoke-RestMethod -Method POST -Uri $Uri -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Body $bodyJson
    

    参数:-project "XXX" -repo "XXX" -sourceBranch "XX" -targetBranch "XX" -title "XX" -des "XX" -token [$(System.AccessToken) or personal access token]

    【讨论】:

    • 将这些作为 VSTS 原生可用的任务会很有趣
    • @baywet 您可以通过 VSTS 扩展构建自定义任务:docs.microsoft.com/en-us/vsts/extend/develop/add-build-task
    • 我继续接受您的回答,因为它似乎是正确的;不过,我自己并没有对其进行测试,而是转向基于主干的开发,这不再是一个问题。感谢您如此迅速地提供彻底的解决方案!
    • 我迟到了,但是:我使用 OAuth 令牌 ($(System.AccessToken)) 得到了 "TF401027: You need the Git 'PullRequestContribute' permission to perform this action.。我有适当的许可。有什么想法吗?
    • 您可以尝试这种替代身份验证方法:$headers = @{ Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN" } $pipeline = Invoke-RestMethod -Uri $url -Method Post -Headers $headers -Body $body -ContentType 'application/json'
    【解决方案2】:

    您可以安装 Create Pull Request 扩展,它使您能够从具有多目标分支的发布管道自动创建拉取请求:

    【讨论】:

      猜你喜欢
      • 2020-01-25
      • 1970-01-01
      • 1970-01-01
      • 2020-05-27
      • 2020-06-17
      • 1970-01-01
      • 2021-03-05
      • 1970-01-01
      相关资源
      最近更新 更多