如何授权Microsoft托管代理拉取同一ADO项目的Terraform Git模块?
解决Microsoft托管代理拉取同一ADO项目内Terraform Git模块的权限问题
方法1:使用Azure DevOps系统访问令牌(推荐)
利用ADO流水线自动生成的System.AccessToken完成授权,无需额外维护密钥:
- 修改流水线的Terraform Init任务,在执行
terraform init前配置Git凭据:
- powershell: | git config --global credential.helper store echo "https://$(System.AccessToken):x-oauth-basic@dev.azure.com" > "$HOME/.git-credentials" terraform init displayName: 'Terraform Init' workingDirectory: src/terraform
- 配置流水线作业权限:
- 进入流水线编辑页,点击右上角「...」→「作业权限」
- 开启「允许脚本访问OAuth令牌」
- 在「仓库权限」中,将
keyvault仓库的读取权限设为「允许」
方法2:通过相对路径引用模块(限流水线同时检出双仓库场景)
如果流水线同时拉取了repo_that_uses_keyvault_module和keyvault两个仓库,可直接用本地路径引用模块,跳过Git授权:
- 在流水线中添加额外的仓库检出步骤:
- checkout: git://org1/project1/keyvault path: 'keyvault'
- 修改Terraform模块源为相对路径:
module "key_vault" { source = "../../keyvault" # 根据实际检出后的目录结构调整路径 # 模块参数配置 }
方法3:使用个人访问令牌(PAT)
若上述方法不适用,可创建具备仓库读取权限的PAT作为备选方案:
- 在ADO中创建PAT,权限勾选「代码(读取)」
- 在流水线中添加保密变量
ADO_PAT,值为创建的PAT - 修改Terraform Init任务:
- powershell: | git config --global credential.helper store echo "https://$(ADO_PAT):x-oauth-basic@dev.azure.com" > "$HOME/.git-credentials" terraform init displayName: 'Terraform Init' workingDirectory: src/terraform
内容的提问来源于stack exchange,提问作者michasaucer
相关产品推荐
相关产品推荐

