如何用Terraform Azure DevOps Provider按项目批量创建对应代码仓库
Terraform 实现 Azure DevOps 批量项目与对应仓库创建方案
默认你已完成microsoft/azuredevops provider的认证配置,以下是两种适配方案:
方案1:直接适配你当前的terraform.tfvars配置
第一步:声明变量(variables.tf)
先匹配你现有tfvars的参数做变量定义:
variable "Project_Name" { type = list(string) description = "Azure DevOps项目名称列表" } variable "Proj1_Repos" { type = list(string) description = "Proj1下的仓库列表" } variable "Proj2_Repos" { type = list(string) description = "Proj2下的仓库列表" }
第二步:编写资源逻辑(main.tf)
# 批量创建Azure DevOps项目 resource "azuredevops_project" "projects" { for_each = toset(var.Project_Name) name = each.value visibility = "private" work_item_template = "Agile" } # 为Proj1批量创建对应仓库 resource "azuredevops_git_repository" "proj1_repos" { for_each = toset(var.Proj1_Repos) project_id = azuredevops_project.projects["Proj1"].id name = each.value initialization { init_type = "Clean" } } # 为Proj2批量创建对应仓库 resource "azuredevops_git_repository" "proj2_repos" { for_each = toset(var.Proj2_Repos) project_id = azuredevops_project.projects["Proj2"].id name = each.value initialization { init_type = "Clean" } }
直接执行terraform apply即可实现仓库和项目的对应绑定。
方案2:高扩展性优化方案(推荐)
如果后续需要新增更多项目,无需每次新增变量,建议调整为项目-仓库映射结构:
调整后的terraform.tfvars
project_repo_map = { Proj1 = ["Repo1","Repo2","Repo3"] Proj2 = ["Repo4","Repo5","Repo7"] # 后续新增项目仅需在这里加键值对即可 # Proj3 = ["Repo8","Repo9"] }
对应的variables.tf
variable "project_repo_map" { type = map(list(string)) description = "项目与对应仓库列表的映射关系" }
对应的main.tf资源逻辑
# 批量创建所有项目 resource "azuredevops_project" "projects" { for_each = var.project_repo_map name = each.key visibility = "private" work_item_template = "Agile" } # 一套逻辑批量创建所有项目对应的所有仓库 resource "azuredevops_git_repository" "repos" { for_each = { for proj_name, repos in var.project_repo_map: for repo_name in repos: "${proj_name}-${repo_name}" => { project_id = azuredevops_project.projects[proj_name].id repo_name = repo_name } } project_id = each.value.project_id name = each.value.repo_name initialization { init_type = "Clean" } }
内容的提问来源于stack exchange,提问作者mystack
相关产品推荐
相关产品推荐

