如何通过VSTS自动构建中的私有Github子模块进行身份验证?

时间:2018-06-26 23:40:16

标签: github azure-devops

我在VSTS上托管了一个存储库。该存储库具有一个私有github存储库作为子模块。我启用了结帐子模块。

Repo configuration

...

Checkout submodules

使用托管的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凭据存储在系统凭据管理器中来解决此问题。有没有一种方法而不必创建自己的构建代理?

1 个答案:

答案 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)。