我有一个Terraform main.tf
文件,它从另一个git仓库调用模块。
module "ModuleName" {
source = "git::https://[email protected]/OrgName/SW/_git/AnotherRepoName?ref=BranchName"
我的Azure DevOps Pipeline Yaml代码在ubuntu-latest
上运行如下。
trigger:
- None
pool:
vmImage: 'ubuntu-latest'
任务如下所示:
- task: PowerShell@2
displayName: powershell-job
inputs:
workingDirectory: '$(System.DefaultWorkingDirectory)/BranchPolicies/Terraform'
targetType: 'inline'
script: |
write-host '$(SYSTEM_ACCESSTOKEN)'
pwd
$env:SYSTEM_ACCESSTOKEN = "$(System.AccessToken)"
write-host '$(system.accesstoken)'
git config --global http.https://dev.azure.com/OrgName/Infra.extraheader "AUTHORIZATION: bearer $env:SYSTEM_ACCESSTOKEN"
terraform init
terraform plan
env:
SYSTEM_ACCESSTOKEN: $(system.accesstoken)
Terraform计划失败并抛出如下错误:
│ Could not download module "ModuleName" (main.tf:58) source code from
│ "git::https://[email protected]/OrgName/SW/_git/AnotherRepoName?ref=BranchName":
│ error downloading
│ 'https://[email protected]/OrgName/SW/_git/AnotherRepoName?ref=BranchName':
│ /usr/bin/git exited with 1: error: pathspec 'master' did not match any
│ file(s) known to git
注意:出于安全原因,我也更改了日志中的OrgName和BranchNames。
为什么要查找Master分支而不是我在模块源代码的脚本中提到的BranchName?
2条答案
按热度按时间zvms9eto1#
在【组织设置】(或【项目设置】)>【管道】>【设置】页面:
Limit job authorization scope to current project
选项,则System.AccessToken
**令牌只能访问当前管道所在项目内的资源。Limit job authorization scope to current project
”选项,则令牌**System.AccessToken
**可以跨当前Azure DevOps组织中正在运行管道的项目访问资源。详细内容请参见“作业授权范围"。
但是,如果要访问的模块源git存储库位于其他Azure DevOps组织中,则令牌**
System.AccessToken
将无法访问它。由于令牌无法访问存储库,因此任务将无法列出存储库中的现有分支。然后,它可能会尝试搜索“
master
**”作为存储库的默认分支。在这种情况下,您需要提供一个PAT(个人访问令牌)来访问该git仓库。
mftmpeh82#
我通过如下更新脚本修复了这个问题,问题是环境变量名,它只使用
AZDO_PERSONAL_ACCESS_TOKEN
和AZDO_ORG_SERVICE_URL
名称。