首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker Hub和Git子模块

Docker Hub和Git子模块
EN

Stack Overflow用户
提问于 2019-01-06 03:51:18
回答 3查看 2.6K关注 0票数 4

我有一个使用git子模块的存储库,并且我在Docker Hub上配置了自动构建。在构建过程的开始,看起来Docker Hub从默认分支(master)中拉出存储库,更新子模块,然后签出到触发构建的特定分支(假设分支功能-a)。如果feature-a分支具有与master完全相同的子模块,那么它工作得很好,但是如果子模块不同(比方说,从不同的repo中提取一个子模块),构建就会失败。

有没有办法让Docker Hub直接克隆正确的分支?

EN

回答 3

Stack Overflow用户

发布于 2020-01-08 14:25:43

你需要使用钩子:https://docs.docker.com/docker-hub/builds/advanced/#custom-build-phase-hooks

TL;DR:将其放在hooks/post_checkout

代码语言:javascript
复制
#!/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
票数 8
EN

Stack Overflow用户

发布于 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

票数 3
EN

Stack Overflow用户

发布于 2021-12-07 14:48:55

Clintm推荐的SSH_PRIVATE (在官方文档中)对我们不起作用。据我所知,这是因为设置环境变量的Docker集线器接口不允许填充换行符(!?)

我花了一些时间来寻找一种与我们的需求相匹配的解决方案,它对我们很有效。

我让它在这里,如果它能帮助到你们中的一些人。

/hooks/post_checkout

代码语言:javascript
复制
#!/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 --init
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54055666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档