我有一个使用git子模块的存储库,并且我在Docker Hub上配置了自动构建。在构建过程的开始,看起来Docker Hub从默认分支(master)中拉出存储库,更新子模块,然后签出到触发构建的特定分支(假设分支功能-a)。如果feature-a分支具有与master完全相同的子模块,那么它工作得很好,但是如果子模块不同(比方说,从不同的repo中提取一个子模块),构建就会失败。
有没有办法让Docker Hub直接克隆正确的分支?
发布于 2020-01-08 14:25:43
你需要使用钩子: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发布于 2019-02-09 06:27:40
它可能会失败,因为子模块是私有的。
您可以添加一个构建环境变量SSH_PRIVATE。并添加可访问私有子模块存储库的私钥。
不过,需要注意的是,…您可能希望生成一个不同于用于其他任何内容的私钥,并将其添加到私有子模块存储库中。
编辑:即使您的链接github帐户有权访问存储库,这也是必需的,因为您很可能将子模块url指定为基于ssh的(例如,git@github.com: account /repo.git)
Edit2:添加文档https://docs.docker.com/docker-hub/builds/#build-repositories-with-linked-private-submodules
发布于 2021-12-07 14:48:55
Clintm推荐的SSH_PRIVATE (在官方文档中)对我们不起作用。据我所知,这是因为设置环境变量的Docker集线器接口不允许填充换行符(!?)
我花了一些时间来寻找一种与我们的需求相匹配的解决方案,它对我们很有效。
我让它在这里,如果它能帮助到你们中的一些人。
/hooks/post_checkout
#!/bin/bash
# Docker documentation to set up private git submodule for build does not work
# since it's not possible to set environment variable with line break in Docker
# Hub interface. It makes impossible to set SSH_PRIVATE as suggested here:
# https://docs.docker.com/docker-hub/builds/#build-repositories-with-linked-private-submodules
#
# To use the script below:
# - As suggested in the official doc, generate a keypair and push the public
# part to your source code provider account
# - In Docker Hub build configuration, set var SSH_PRIVATE_ESCAPED with the output of
# `awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' /path/to/the/private/key`
SSH_PRIVATE_FILE=~/git_id_rsa
echo "${SSH_PRIVATE_ESCAPED}" | awk '{gsub(/\\n/,"\n")}1' > "${SSH_PRIVATE_FILE}"
chmod 0400 "${SSH_PRIVATE_FILE}"
export GIT_SSH_COMMAND="ssh -i ${SSH_PRIVATE_FILE}"
git submodule update --inithttps://stackoverflow.com/questions/54055666
复制相似问题