我可以在Visual Studio Team Services(Visual Studio Online)中设置默认安全性和/或分支策略吗?

时间:2017-07-24 18:54:19

标签: git azure-devops

我们正在使用Visual Studio Team Services作为我们的git服务器。每个VSTS项目都有一个或多个git repos。我们的惯例是将masterdevelop分支机构锁定,但让其他分支机构保持不受限制。

我希望能够在项目级别应用我们的标准规则,并将它们作为其中所有回购的默认值:

  • masterdevelop的安全性应拒绝Force Push
  • master分支需要通过代码审核政策提取请求

到目前为止,我发现的 only 选项是通过Web界面(甚至不是API!)手动设置这些每个存储库。我们至少拥有200多个存储库,并希望避免手动设置每个仓库和分支。

如何按分支名称设置默认代码安全性和代码策略?或者通过手动以外的任何方式?

3 个答案:

答案 0 :(得分:10)

  • 要在团队项目(项目级别)中为多个git存储库设置最少审阅者的分支策略,可以使用REST API。详细步骤如下:

<强> 1。团队项目Get all git repositories

GET https://account.visualstudio.com/DefaultCollection/ProjectName/_apis/git/repositories?api-version=1.0

然后从输出中保存每个git repo id和name。

<强> 2。通过repo id将您在step1中获得的存储库循环到代码中,并为每个主分支循环create branch policy (假设此处的最小审阅者数量为2)。

POST https://account.visualstudio.com/DefaultCollection/ProjectName/_apis/policy/configurations?api-version=2.0-preview

应用程序/ JSON:

{
  "isEnabled": true,
  "isBlocking": true,
  "type": {
    "id": "fa4e907d-c16b-4a4c-9dfa-4906e5d171dd"
  },
  "settings": {
                "minimumApproverCount": 2,
                "creatorVoteCounts": false,
                "allowDownvotes": false,
                "scope": [
                    {
                        "refName": "refs/heads/master",
                        "matchKind": "Exact",
                        "repositoryId": "{repo id}"
                    }
                ]
  }
}
  • 为了设置分支机构安全性(强制推送为拒绝),没有这样的REST API,我发布了用户语音Set branch security by REST API,您可以投票并跟进。

答案 1 :(得分:4)

要编写存储库和分支安全性脚本,可以使用tfssecurity.exe或新权限的REST API或Azure CLIAll details in the following blog post

对于特定的分支,在令牌的末尾添加/refs^heads^master/

摘录

如果您过去曾经研究过Azure DevOps的安全性,则会发现某些权限授予了个人或组并链接到令牌。此令牌通常由根对象和一堆GUID组成。例如,这是特定Git存储库的令牌:

repoV2/daec401a-49b6-4758-adb5-3f65fd3264e3/f59f38e0-e8c4-45d5-8dee-0d20e7ada1b7
^      ^                                    ^
|      |                                    |
|      |                                    -- The Git Repository
|      -- The Team Project Guid
|
-- The root object (Repositories)

我知道找到这些详细信息的最简单方法是捕获更改权限后发出的Web请求:

enter image description here

您可以在喜欢的浏览器中使用Web Developer工具来查找所需的令牌。 一旦了解了这一点,就很容易找到“团队项目中的所有存储库”令牌的令牌。只需在最后关闭Git Repository GUID:

repoV2/daec401a-49b6-4758-adb5-3f65fd3264e3b7/
^      ^                                    
|      |                                    
|      -- The Team Project Guid
|
-- The root object (Repositories)

并使用相同的推理,获取“ Project Collection / Organization中的所有存储库”令牌的令牌。最后,摘下Team Project GUID:

repoV2/
^                                          
|
-- The root object (Repositories)

现在有了这个令牌,我们可以使用tfssecurity设置组织级别的git权限:

tfssecurity /a+ "Git Repositories" repoV2/ "PullRequestBypassPolicy" adm: ALLOW /collection:https://dev.azure.com/org
            ^   ^                  ^       ^                         ^    ^
            |   |                  |       |                         |    -- Allow or Deny the permission 
            |   |                  |       |                         -- The Group (in this case "Project Collection Administrators")
            |   |                  |       -- The Permission we want to set
            |   |                  -- The Token we found above
            |   -- The Secuity Namespace
            -- Add  (a+) or Remove (a-) this permission

而且,正如您在下面看到的,此技巧实际上是有效的:)。

enter image description here

您可以使用相同的技术来保护分支。分支的令牌使用存储库的令牌作为基础,并将分支添加到该令牌。因为/是令牌分隔符,所以通过将/替换为^来转义分支引用。因此refs/heads/master变为:refs^heads^master

repoV2/daec401a-49b6-4758-adb5-3f65fd3264e3/f59f38e0-e8c4-45d5-8dee-0d20e7ada1b7/refs^heads^master/
^      ^                                    ^                                    ^
|      |                                    |                                    |
|      |                                    |                                    -- The branch
|      |                                    -- The Git Repository
|      -- The Team Project Guid
|
-- The root object (Repositories)

答案 2 :(得分:0)

通过最近的更新,您现在可以通过UI本身进行配置。

现在,管理员可以在特定分支或默认分支上设置策略 在其项目中的所有存储库中进行分支。

只需转到“项目设置” =>“跨库策略”。

enter image description here

唯一的警告是,作为最近的更改,它将仅在Azure Devops云服务上有效,而在Azure Devops服务器部署上不可用。因此,如果您使用的是服务器版本,则可能需要等待一段时间。

您可以引用以下网址:https://docs.microsoft.com/en-us/azure/devops/release-notes/2019/repos/sprint-160-update