GitLab流水线中Terragrunt用Job Token替代SSH拉取Terraform模块
GitLab流水线中用Job Token认证Terraform模块的配置方案
问题分析
你之前的git config替换规则没生效,核心原因是规则只匹配了ssh://git@git.foobar.de前缀,但你的模块源地址还包含后续的/bar/xdf/terraform_modules.git路径部分,导致HTTPS转换后的地址没有正确映射到仓库路径,触发"未找到"错误。
修正配置方案
1. 通用替换规则(推荐)
用路径前缀匹配所有同域名下的SSH仓库,确保不管路径是否带.git后缀都能正确转换:
git config --global url."https://gitlab-ci-token:${CI_JOB_TOKEN}@git.foobar.de/".insteadOf "ssh://git@git.foobar.de/"
这条命令会把所有以ssh://git@git.foobar.de/开头的Git地址,替换为带Job Token的HTTPS格式,完美适配你带.git后缀的模块源。
2. 单个仓库精准匹配(可选)
如果只想针对特定模块仓库做替换,可以用更精确的规则:
git config --global url."https://gitlab-ci-token:${CI_JOB_TOKEN}@git.foobar.de/bar/xdf/terraform_modules.git".insteadOf "ssh://git@git.foobar.de/bar/xdf/terraform_modules.git"
关键注意事项
- 权限配置:确保模块所在的GitLab仓库允许流水线Job Token访问。在模块仓库的「设置→CI/CD→权限」中,开启「允许来自项目的CI作业访问此项目」;或者在流水线所在项目的「设置→CI/CD→依赖项」中添加模块仓库。
- 执行时机:必须在
terraform init(或terragrunt run-all init)之前执行git config命令,确保Git替换规则生效。 - Terragrunt兼容:Terragrunt会直接调用系统的Git命令,只要系统Git配置正确,不需要额外修改Terragrunt配置。
验证方法
在流水线脚本中添加验证步骤,确认替换规则生效:
# 查看已配置的Git替换规则 git config --global --get-regexp url # 测试仓库访问 git ls-remote ssh://git@git.foobar.de/bar/xdf/terraform_modules.git
如果能正常返回仓库的引用信息,说明配置成功。
内容的提问来源于stack exchange,提问作者lony
相关产品推荐
相关产品推荐

