Azure DevOps构建子模块

10

我有一个私有的 Bitbucket 仓库,它连接到 Azure DevOps 构建管道。私有仓库与公共 Github 仓库相连的子模块。

两个仓库都通过 SSH 访问。

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

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

2个回答

13

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

有一个可用的步骤叫做“加载SSH密钥”。

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

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


哈哈哈!在使用 Azure DevOps 的旅途中刚刚遇到了这个 xD。 - Mark Silver

1
不需要在Azure DevOps提供SSH密钥,您只需要在私有的Bitbucket仓库中修改.gitmodules文件以指定子模块Github仓库的HTTP协议URL。例如,将.gitmodules文件修改为:
[submodule "myrepo"]
    path = myrepo
    url = https://github.com/username/myrepo.git

现在,当您再次排队构建时,它将在获取源代码(检出)步骤中成功下载子模块存储库。
而造成主要构建失败的原因是,在获取子模块源代码时,构建代理没有与Github匹配的SSH密钥。因此,如果您不想使用HTTP协议修改.gitmodules文件,则应该排队构建包含您在GitHub中指定的公钥的自托管代理
以下是设置自托管代理的详细步骤:
  1. 在页面https://account.visualstudio.com/_usersSettings/tokens中创建并复制一个PAT以备后用。如果您已经有PAT,则跳过此步骤。
  2. 下载代理

    在代理池页面(https://account.visualstudio.com/_settings/agentpools) -> 下载代理到GitHub repo SSH所在的本地机器上 -> 解压缩到一个目录中。

    enter image description here

  3. 设置自托管代理

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

    配置完成后,如果代理处于离线状态 -> 在PowerShell窗口中执行./run.cmd,以确保代理状态为在线。

    enter image description here

现在,您可以使用自托管代理进行构建队列。

将 .gitmodules 更新为使用 https 的问题是,我需要使用 https 与 github 存储库通信,如果要向该存储库推送更改,就意味着要将用户名和密码放入 gitmodules 或 sourcetree 中。SSH 可以解决此问题,并且是访问 git 存储库的首选方式。我希望能够将 SSH 密钥添加到构建代理中,但我不知道如何在提供的链接中使用自托管代理来实现这一点。 - Dean Marcussen
1
@DeanMarcussen 我更新了我的答案,详细介绍了设置自托管代理的步骤,你可以试一试。此外,使用http协议,你还可以将用户名和密码集成到仓库URL中(https://username:password@github.com/myrepo.git),这样就不会被通信窗口打断了。 - Marina Liu
2
这似乎并不是问题的解决方案——通过HTTP访问并在Git存储库中包含用户名和密码似乎是一个非常倒退的步骤。我也不想运行自托管代理——这又违背了VSTS的目的。然而,我发现了一种加载SSH代理的步骤,这对我来说解决了问题。 - Dean Marcussen
@DeanMarcussen,既然你的问题已经解决了,你可以标记自己的答案。这也将有益于其他遇到类似问题的人。 - Marina Liu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接