Github Azure DevOps构建子模块

Github Azure DevOps构建子模块,github,ssh,azure-devops,bitbucket,azure-pipelines,Github,Ssh,Azure Devops,Bitbucket,Azure Pipelines,我有一个连接到Azure DevOps构建管道的私有bitbucket回购。 私有回购有一个子模块连接到公共Github回购 这两个存储库都是通过SSH访问的 我在DevOps中勾选了克隆子模块框 如何向Azure DevOps提供SSH密钥,以便它克隆子模块?无需向Azure DevOps提供SSH密钥,您只需修改私有bitbucket repo中的.gitmodules文件,即可使用HTTP协议指定子模块github repo URL 例如,将.gitmodules文件修改为: [submo

我有一个连接到Azure DevOps构建管道的私有bitbucket回购。 私有回购有一个子模块连接到公共Github回购

这两个存储库都是通过SSH访问的

我在DevOps中勾选了克隆子模块框


如何向Azure DevOps提供SSH密钥,以便它克隆子模块?

无需向Azure DevOps提供SSH密钥,您只需修改私有bitbucket repo中的
.gitmodules
文件,即可使用HTTP协议指定子模块github repo URL

例如,将
.gitmodules
文件修改为:

[submodule "myrepo"]
    path = myrepo
    url = https://github.com/username/myrepo.git

现在,当您再次对构建排队时,它将在获取源代码(签出)步骤中成功下载子模块repo

然而,由于它主要是在获取源代码步骤中构建失败的原因,这是因为在获取soubmodule源代码时,构建代理没有与Github中匹配的SSH密钥。因此,如果您不想使用HTTP协议修改
.gitmodules
文件,您应该将包含您在GitHub中指定的ssk公钥的生成排队

设置自托管代理的详细步骤如下:

  • 在页面中创建并复制PAT以供以后使用。如果您已经有PAT,则跳过此步骤
  • 下载代理

    在代理池页面()->将代理下载到GitHub repo SSH所在的本地计算机->在目录中解压缩

  • 安装自托管代理

    在解压后的目录->以管理员身份打开PowerShell->执行
    /config.cmd
    ->按提示输入URL、PAT、代理池(如默认代理池)等

    配置后->如果代理处于脱机状态,请执行PowerShell窗口中的行->执行
    /run.cmd
    ,以确保代理状态处于联机状态


  • 现在,您可以使用自托管代理对生成进行排队。

    解决方案是不更改为https或设置自托管代理

    有一个步骤称为加载SSH密钥

    我在github上创建了一个新的ssh密钥,将加载ssh密钥步骤添加到VSTS任务中


    它在签出任务之前运行(尽管之后出现在队列中),并在代理上加载所需的ssh密钥

    更新.gitmodules以使用https的问题是,我需要使用https与github repo通信,如果我想推动对repo的更改,这意味着将用户名和密码放入gitmodules/或sourcetree。Ssh解决了这个问题,是访问git存储库的首选方式。我希望能够将SSH密钥添加到构建代理中,但我不明白如何使用提供的链接中的自托管代理来实现这一点?@DeanMarcussen我更新了我的答案详细信息步骤以设置自托管代理,您可以尝试一下。此外,使用http协议,您还可以在repo URL中集成用户名和密码(
    https://username:password@github.com/myrepo.git
    ),这样它就不会被通信窗口打断。这听起来不像是一个解决问题的办法——转到http,在git repo中包含用户名和密码似乎是一个非常落后的步骤。我也不想运行自托管代理—这再次违背了VST的目的。不过,我确实发现了一个加载ssh代理的步骤,以便为me@DeanMarcussen既然你的问题已经解决了,你可以标记你自己的答案。这也会让其他遇到类似问题的人受益。哈哈哈!在我使用Azure Devops xD的旅行中遇到了这个问题