在Terraform中为Azure DevOps指定仓库(TFA、TFB)覆盖禁用继承的分支策略
在Terraform中为Azure DevOps指定仓库(TFA、TFB)覆盖禁用继承的分支策略
我来帮你搞定这个问题!你需要用到Terraform的azuredevops_branch_policy资源,通过它可以针对指定仓库的特定分支创建自定义分支策略,直接覆盖掉继承的默认策略,并且禁用那些阻碍自动提交的规则。
核心思路
默认分支策略是全局继承的,要覆盖它,关键是在创建新的分支策略时设置inherit_settings = false,这样就能让这个策略不继承默认配置,完全按照你定义的规则生效。同时要把策略的作用范围精确限定在TFA和TFB这两个仓库的主分支上。
具体实现步骤&代码示例
首先,你需要先获取Azure DevOps项目ID以及TFA、TFB两个仓库的ID。可以手动从Azure DevOps页面获取,也可以用Terraform的数据源自动拉取,后者更适合自动化场景:
# 获取Azure DevOps项目信息 data "azuredevops_project" "example" { name = "你的项目名称" } # 获取TFA仓库ID data "azuredevops_git_repository" "tfa" { project_id = data.azuredevops_project.example.id name = "TFA" } # 获取TFB仓库ID data "azuredevops_git_repository" "tfb" { project_id = data.azuredevops_project.example.id name = "TFB" }
接下来,针对每个需要覆盖的策略类型,创建azuredevops_branch_policy资源。比如如果默认策略要求必须通过PR才能合并到主分支,你可以创建一个对应的策略禁用这个规则:
# 遍历两个仓库,创建禁用PR要求的分支策略 resource "azuredevops_branch_policy" "disable_pr_requirement" { for_each = toset([data.azuredevops_git_repository.tfa.id, data.azuredevops_git_repository.tfb.id]) project_id = data.azuredevops_project.example.id type = "required_reviewers" # 对应"需要评审者"的策略类型 branch = "refs/heads/main" # 目标分支为主分支 inherit_settings = false # 关键:禁用继承默认策略 # 配置策略参数,这里设置为不需要评审(即禁用原继承的PR要求) settings = jsonencode({ isEnabled = false isBlocking = false requiredReviewerIds = [] scope = [ { repositoryId = each.value refName = "refs/heads/main" matchKind = "Exact" } ] }) }
如果还有其他需要覆盖的策略(比如构建验证、工作项关联要求),只需要复制上面的资源块,修改type字段和对应的settings即可:
- 构建验证对应的
type是build_validation - 工作项关联要求对应的
type是require_work_item_link
注意事项
- 你需要确认每个要覆盖的策略对应的
type值,常见的策略类型对应值可以参考上面列出的几个 settings字段需要用jsonencode来序列化配置,里面的参数要和对应策略类型的配置结构匹配,核心是把isEnabled设为false来禁用该规则- 应用配置前,可以先用
terraform plan预览变更,确认策略只会作用在TFA和TFB两个仓库上,不会影响其他仓库
这样配置后,Terraform会为TFA和TFB的主分支创建自定义分支策略,完全覆盖继承的默认规则,你就能自动提交到主分支了。
备注:内容来源于stack exchange,提问作者Lakshay Kashyap
相关产品推荐
相关产品推荐

