首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我可以在Azure DevOps中设置默认的安全性和/或分支策略吗?

我可以在Azure DevOps中设置默认的安全性和/或分支策略吗?
EN

Stack Overflow用户
提问于 2017-07-24 18:54:18
回答 3查看 5K关注 0票数 13

我们使用Visual Studio Team Services作为git服务器。每个Azure DevOps项目都有一个或多个git repos。我们有保持masterdevelop分支锁定的惯例,但允许其他分支保持不受限制。

我希望能够在项目级别应用我们的标准规则,并让它们成为它们中所有repos的缺省值:

  • masterdevelop应该有他们的安全性拒绝Force Push
  • master分支需要通过代码审查策略进行拉请求

到目前为止,我发现的选项是通过web接口(甚至不是API!)手动设置每个存储库。我们至少有200+存储库,并希望避免手动设置每个回购和分支一个一个。

如何根据分支名称设置默认代码安全和代码策略?或者除了手动以外的其他方法?

EN

回答 3

Stack Overflow用户

发布于 2017-07-25 04:11:39

  • 要为跨团队项目(项目级别)的多个git存储库设置分支策略,可以使用REST。具体步骤如下:

1.团队项目的 获取所有git存储库 .

代码语言:javascript
运行
复制
GET https://account.visualstudio.com/DefaultCollection/ProjectName/_apis/git/repositories?api-version=1.0

然后从输出中保存每个git id和名称。

2.通过repo循环代码中在step1中获得的存储库,并为每个主分支循环 创建分支策略 (假设这里的审核者的最小数量为2)。

代码语言:javascript
运行
复制
POST https://account.visualstudio.com/DefaultCollection/ProjectName/_apis/policy/configurations?api-version=2.0-preview

申请书/json:

代码语言:javascript
运行
复制
{
  "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,而且我发布了一个用户语音通过REST设置分支安全性,您可以投票和跟进。
票数 15
EN

Stack Overflow用户

发布于 2019-08-11 14:20:14

要编写存储库和分支安全性的脚本,可以使用tfssecurity.exe或新的权限REST或Azure CLI以下博客文章中的所有细节

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

节选

如果您以前深入研究过Azure DevOps的安全内部,您会发现某些权限被授予个人或组,并链接到令牌。这个令牌通常是由根对象和一组GUID构建的。例如,这是特定的令牌:

代码语言:javascript
运行
复制
repoV2/daec401a-49b6-4758-adb5-3f65fd3264e3/f59f38e0-e8c4-45d5-8dee-0d20e7ada1b7
^      ^                                    ^
|      |                                    |
|      |                                    -- The Git Repository
|      -- The Team Project Guid
|
-- The root object (Repositories)

要找到这些细节,我知道的最简单的方法是捕获在更改权限时发出的web请求:

您可以在您最喜欢的浏览器中使用工具来查找所需的令牌。一旦您理解了这一点,就很容易找到“Team中的所有存储库”令牌。只需在结束时摘下Git仓库GUID:

代码语言:javascript
运行
复制
repoV2/daec401a-49b6-4758-adb5-3f65fd3264e3b7/
^      ^                                    
|      |                                    
|      -- The Team Project Guid
|
-- The root object (Repositories)

并且,使用相同的推理,获取“Project /Organization中的所有存储库”令牌。只需在结束时脱掉:

代码语言:javascript
运行
复制
repoV2/
^                                          
|
-- The root object (Repositories)

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

代码语言:javascript
运行
复制
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

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

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

代码语言:javascript
运行
复制
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)
票数 5
EN

Stack Overflow用户

发布于 2020-04-17 15:26:36

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

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

只需转到“项目设置”=>“交叉回购策略”。

唯一的警告是,作为一个最近的变化,这将仅适用于Azure Devops云服务,而不是Azure Devops服务器部署。因此,如果您使用的是服务器版本,则可能需要等待某个时间。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45288020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档