STW*_*STW 11 git azure-devops azure-devops-rest-api azure-repos
我们正在为我们的git服务器使用Visual Studio Team Services.每个VSTS项目都有一个或多个git repos.我们有保持master和develop分支锁定的惯例,但让其他分支保持不受限制.
我希望能够在项目级别应用我们的标准规则,并将它们作为其中所有存储库的默认值:
master而develop应该有自己的保安否认Force Pushmaster 分支需要通过代码审查策略提取请求到目前为止,我发现的唯一选择是通过Web界面手动设置这些每个存储库(甚至不是API!).我们拥有至少200多个存储库,并且希望避免必须逐个手动设置每个仓库和分支.
如何按分支名称设置默认代码安全性和代码策略?或者通过手动以外的任何方式?
Mar*_*Liu 13
GET https://account.visualstudio.com/DefaultCollection/ProjectName/_apis/git/repositories?api-version=1.0
Run Code Online (Sandbox Code Playgroud)
然后从输出中保存每个git repo id和name.
2.通过repo id将您在步骤1中获得的存储库循环到代码中,并为每个主分支创建分支策略(假设此处的最小审阅者数量为2).
POST https://account.visualstudio.com/DefaultCollection/ProjectName/_apis/policy/configurations?api-version=2.0-preview
Run Code Online (Sandbox Code Playgroud)
应用/ 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}"
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
要编写存储库和分支安全性的脚本,可以使用tfssecurity.exeREST API 或Azure CLI或新权限。以下博客文章中的所有详细信息:
对于特定的分支,/refs^heads^master/在 Token 末尾添加。
如果您过去深入研究过 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)
Run Code Online (Sandbox Code Playgroud)
我知道找到这些详细信息的最简单方法是捕获更改权限时发出的 Web 请求:
您可以在您喜欢的浏览器中使用 Web Developer 工具来查找您需要的令牌。一旦理解了这一点,就很容易找到“团队项目中的所有存储库”令牌的令牌。最后去掉 Git Repository GUID:
repoV2/daec401a-49b6-4758-adb5-3f65fd3264e3b7/
^ ^
| |
| -- The Team Project Guid
|
-- The root object (Repositories)
Run Code Online (Sandbox Code Playgroud)
并且,使用相同的推理,获取“项目集合/组织中的所有存储库”令牌的令牌。最后去掉 Team Project GUID:
repoV2/
^
|
-- The root object (Repositories)
Run Code Online (Sandbox Code Playgroud)
现在我们有了这个令牌,我们可以使用 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
Run Code Online (Sandbox Code Playgroud)
而且,正如你在下面看到的,这个技巧确实有效:)。
您可以使用相同的技术来保护分支。分支的令牌使用存储库的令牌作为基础并将分支添加到其中。由于/是令牌分离器,一个分支参考通过替换转义/用^。因此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)
Run Code Online (Sandbox Code Playgroud)