You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 00:21:01