我有一个使用git子模块的存储库,并且我在Docker Hub上配置了自动构建。在构建过程的开始,似乎Docker Hub从默认分支(主服务器)中拉出了存储库,更新了子模块,然后签出到触发了构建的特定分支(例如分支Feature-a)。如果feature-a分支具有与master完全相同的子模块,则工作正常,但如果子模块不同(例如,从另一个存储库中拉出一个子模块),则构建失败。
有没有一种方法可以使Docker Hub直接克隆正确的分支?
可能会失败,因为子模块是私有的。
您可以添加构建环境变量SSH_PRIVATE
。并添加一个可以访问私有子模块存储库的私有密钥。
不过请注意,您可能想要生成一个diff私钥,而不是用于其他任何东西的私钥,并将其添加到私有子模块存储库中。
编辑:即使您链接的github帐户有权访问该存储库,这也是必需的,因为您很可能将子模块的url指定为基于ssh的文件(例如[email protected]:Account / repo.git)
Edit2:添加文档https://docs.docker.com/docker-hub/builds/#build-repositories-with-linked-private-submodules
您需要使用钩子:https://docs.docker.com/docker-hub/builds/advanced/#custom-build-phase-hooks
TL; DR:将此放置在hooks/post_checkout
:]中>
#!/bin/bash
# Docker hub does a recursive clone, then checks the branch out,
# so when a PR adds a submodule (or updates it), it fails.
git submodule update --init