根据提升用户设置拉取请求策略

时间:2020-08-19 15:57:03

标签: azure-devops

我想根据谁提出PR而不是PR的内容来分配所需的批准人。

我有一组由多个团队维护的仓库。我希望有一个团队根据进行PR的用户自动添加为必需的审阅者。

这有可能吗?

1 个答案:

答案 0 :(得分:1)

这有可能吗?

这是可能。但是该过程将非常复杂,因为Azure Devops没有这种即用的功能,因此我们必须使用Build Validation/Rest API/PS来实现所需的功能。

1。使用PS任务创建Classic Build管道。

2。在分支机构策略中添加build validation。因此,如果有人提出公关,该管道将首先运行。

3。如果PR触发了一个管道,我们可以访问变量$(Build.Repository.ID)$(Build.RequestedFor)(创建PR的用户),$(Build.RequestedForEmail)(用户的电子邮件)。参见predefined variables

4。使用Teams-Get获取当前项目中的团队列表。您现在有了TeamID,现在知道了用户所属的相应TeamID。

5。使用powershell switch或if语句动态定义用户所属的团队。

switch ("$(Build.RequestedFor)")
{
    "User1" {$TeamID="xxxx"; Break}
    "User2" {$TeamID="xxxx"; Break}
    "User3" {$TeamID="xxxx"; Break}
    Default {
        "No matches"
    }
}

6。使用Configurations-List列出此项目中的ConfigurationID。 (您可能还需要通过SourceRepo和SourceBranch确定正确的ConfigurationID)

7。然后使用Configuration-Update更新分支策略以动态定义所需的批准者。

请求正文如下:

{
  "isEnabled": true,
  "isBlocking": true,
  "type": {
    "id": "fd2167ab-b0be-447a-8ec8-39368250530e"
  },
  "settings": {
    "requiredReviewerIds": [
      "{replace it with corresponding TeamID}"
    ],
    "filenamePatterns": [],
    "addedFilesOnly": false,
    "scope": [
      {
        "repositoryId": "{replace it with your repoID in step3}",
        "refName": "refs/heads/master",
        "matchKind": "exact"
      }
    ]
  }
}

您可以在同一PS任务中执行step5和step7。