我在VSTS上托管了一个存储库。该存储库具有一个私有github存储库作为子模块。我启用了结帐子模块。
...
使用托管的MacOS池运行构建,由于无法通过github进行身份验证,因此失败:
2018-06-26T23:06:55.8029470Z Cloning into '/Users/vsts/agent/2.134.2/work/1/s/repo'...
2018-06-26T23:06:56.2379010Z fatal: could not read Username for 'https://github.com': terminal prompts disabled
2018-06-26T23:06:56.2405350Z fatal: clone of 'https://github.com/team/repo' into submodule path '/Users/vsts/agent/2.134.2/work/1/s/repo' failed
2018-06-26T23:06:56.2419340Z Failed to clone 'repo'. Retry scheduled
2018-06-26T23:06:56.2486770Z Cloning into '/Users/vsts/agent/2.134.2/work/1/s/repo'...
2018-06-26T23:06:56.5982310Z fatal: could not read Username for 'https://github.com': terminal prompts disabled
2018-06-26T23:06:56.6006440Z fatal: clone of 'https://github.com/team/repo' into submodule path '/Users/vsts/agent/2.134.2/work/1/s/repo' failed
2018-06-26T23:06:56.6020680Z Failed to clone 'repo' a second time, aborting
如果主存储库本身不是来自Github,似乎没有放置Github个人访问令牌的地方。
我可以通过创建自己的MacOS构建代理并将github凭据存储在系统凭据管理器中来解决此问题。有没有一种方法而不必创建自己的构建代理?
答案 0 :(得分:3)
是否有一种无需创建我自己的构建代理的方法?
build definition, section submodule提到:
构建过程将检出您的Git子模块,只要它们是:
未经身份验证的:未经身份验证的公共回购,不需要克隆或获取凭据。
已认证:
与上面指定的Git存储库包含在同一项目,GitHub组织或Bitbucket帐户中。
使用相对于主存储库的URL添加。
例如,将其签出:git子模块添加/../../submodule.git mymodule
这个不会被检出:
git submodule add https://fabrikamfiber.visualstudio.com/DefaultCollection/_git/ConsoleApp mymodule
代理用于从主存储库获取源的相同凭据也用于获取子模块的源。
如果您的主存储库和子模块位于同一GitHub组织中,则存储在GitHub服务端点中的令牌将用于访问源。
最后一句话不适用于您的情况,因此需要构建代理。
或者:
如果您不能使用Checkout子模块选项,则可以使用带有以下Git命令的自定义脚本来将子模块的源获取到代理中。
git -c http.https://<url of submodule repository>.extraheader="AUTHORIZATION: basic ********" submodule update --init --recursive
在项目或构建定义中使用秘密变量来存储您在VSTS或GitHub中生成的具有访问子模块权限的个人访问令牌(PAT)。