我有两个名为
private2
和 public2
的 ADO 存储库。 private2
引用 public2
作为子模块:
我还添加了一个用于构建的 yaml 文件(vsts-cicd.yml),如下所示:
resources:
repositories:
- repository: test
type: git
name: <ProjectName>/public2
ref: master
stages:
- template: build1.yml@test
parameters:
repoToCheckout: test
checkoutPath: '$(Build.BuildNumber)'
- template: build2.yml@test
parameters:
repoToCheckout: test
checkoutPath: '$(Build.BuildNumber)'
- template: yaml/build3.yml
运行构建时,我看到前两个模板已成功完成。到达
- template: yaml/build3.yml
时,它失败并出现以下错误:
我错过了什么?
更新:
我按照这篇文章(https://www.timschaeps.be/post/dealing-with-error-tf401019-submodules-azure-pipelines/)解决了这个问题,但是我在项目设置中没有看到这个选项:“将作业授权范围限制为引用的 Azure DevOps 存储库”。我错过了什么?
正如您在更新中提到的,使用 Repo 的项目需要在项目设置中禁用设置
Limit job authorization scope to current project for non-release pipelines
。
注意:请记住,这会将构建标识更改为集合范围。这可能会导致使用 Auzure DevOps Artifacts 时出现问题。请参阅范围构建标识。
您可能还需要将正确的构建服务帐户添加到上游存储库的贡献者中。
换句话说,转到上游项目 -> 设置(齿轮图标) -> 权限 -> 贡献者 -> 成员,然后添加适当的“XXX Build Service (yyy)”。
我不知道为什么它呈灰色,但我认为您还需要禁用“保护对 YAML 管道中存储库的访问”。为我工作。
我最近遇到了这个问题。对我来说,它使用了 Windows 凭据管理器中的错误凭据。我的存储库上存储的凭据的权限已被撤销。所以我删除了过时的凭据并再次克隆。这对我有用。
在 Azure DevOps 上更改存储库名称后,您也可能会收到此错误。
假设存储库名称为
repo-x
,并且您一直在本地处理它。如果将存储库的名称更改为 repo-y
,您将收到此错误,因为您的本地 Git 存储库仍然指向旧的存储库名称 (repo-x
),但您在 Azure DevOps 中将名称更改为 repo-y
。
在这种情况下,您可以通过运行
git remote -v
来检查本地存储库的远程 URL。
你会看到类似这样的东西:
origin https://dev.azure.com/organization-name/project-name/_git/repo-x (fetch)
origin https://dev.azure.com/organization-name/project-name/_git/repo-x (push)
您需要更新本地存储库中的远程 URL 以匹配新的存储库名称。因此,您需要根据新的存储库名称运行此命令。
git remote set-eurl origin https://dev.azure.com/organization/project-name/_git/repo-y
进行此更改后,您不应再收到错误。