首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单文档GitHub存储库+ Docker集线器自动构建

单文档GitHub存储库+ Docker集线器自动构建
EN

Stack Overflow用户
提问于 2018-11-08 14:05:04
回答 1查看 591关注 0票数 7

我想在dockerfiles上创建一个GitHub存储库,以集中我到目前为止创建的所有自定义Dockerfile。我也想自动构建码头枢纽上的每一个形象,独立。

在GitHub上有许多这样的存储库:

(我不想在这里谈论最著名的存储库:https://github.com/jessfraz/dockerfiles,因为您可以看到论码头枢纽,这些是而不是自动构建)

想要的dockerfiles存储库结构

我希望我的dockerfiles GitHub存储库具有以下结构(分支master),基于我前面提到的GitHub存储库:

代码语言:javascript
复制
dockerfiles (GitHub repo)
    |- docker-image-1
        |- Dockerfile
    |- docker-image-2
        |- Dockerfile
    |- ...

码头枢纽建立自动化

配置

在Docker上,我可以创建两个公共的自动化构建:docker-image-1docker-image-2,它们都是指我的dockerfiles GitHub存储库,但是使用不同的构建设置(实际上,只有Dockerfile位置不同):

  • docker-image-1
    • 类型:支部
    • 名称:师父
    • Dockerfile位置:/docker-image-1/
    • 码头标签名称:最新

  • docker-image-2
    • 类型:支部
    • 名称:师父
    • Dockerfile位置:/docker-image-2/
    • 码头标签名称:最新

弊端

使用此配置,如果对分支进行了推送,则将重新生成的所有图像(即使push只关心1 Dockerfile,_Dockerfile Location_s则不同)。我已经检查过了,对于维马迪克储存库,它似乎是这样配置的。但我不认为这是正确的方式(如果我错了,告诉我)。

当然,在每个自动生成的builds中,我可以禁用“当活动时,生成将在推送时自动发生”选项,以避免这种情况,但是我必须手动触发每个构建,这取决于我更新的Dockerfile (不是自动的)。

提高自动化程度?

我看到的提高自动化的解决方案是:

  1. 自己的GitHub存储库中的每个GitHub分开。不再有dockerfiles存储库,因此每个库都有自己的工作流。
  2. 使用单个GitHub存储库dockerfiles,但是对于使用不同的分支(每个Docker映像一个)。然后,可以将每个构建配置为仅在适当的分支上触发。

使用这些解决方案,问题在于我丢失了所有的全局概览。我更喜欢使用单一分支的存储库的想法,但我不希望在这个分支上的每一次推送上都重建所有的映像。

如果选择解决方案1,我不知道git是否可以帮助我保留一个引用所有存储库的存储库dockerfiles,例如:

代码语言:javascript
复制
 dockerfiles (GitHub repo)
    |- docker-image-1 -> link to https://github.com/norbjd/docker-image-1
        |- Dockerfile
    |- docker-image-2 -> link to https://github.com/norbjd/docker-image-2
        |- Dockerfile

然后,克隆整个项目并执行拉请求就更容易了(因为一些映像是相关的:更新docker-image-1/Dockerfile可能导致更新docker-image-2/Dockerfile)。我读过关于Git子模块和子树的文章,但是我不知道它们在这里是否合适。

也许使用一个存储库是可能的,它只是关于找到正确的。

什么是最佳做法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-17 23:35:15

首先,没有最佳实践,只有对你有用的东西。如我所见,这两项决定都是1.)和2.)关于通用存储库,dockerfiles很好地应用了Docker自动化,但我建议使用git submodulesgit subtrees来补充它们。我不想详细介绍Docker自动化,而是介绍如何保留公共存储库dockerfiles

1.)您可以将Dockerfile映像分离到它自己的存储库中。那么在您的dockerfiles中,我建议使用git submodule

代码语言:javascript
复制
git submodule add https://github.com/norbjd/docker-image-1
git commit -m "Add docker-image-1 as submodule"

不幸的是,您不能AFAIK只选择一个文件使用子模块,相反,您有一个链接到原始回购。您可以看看从另一个git存储库链接单个文件git:外部存储库中文件的符号链接/引用。但是要小心使用子模块,因为有众所周知的缺点,如果有人想要使用它的话。我还举了一个例子这里,向您展示它的外观。

2.)您只能使用一个GitHub dockerfiles存储库,但接下来我将使用git subtree。您可以在不同的分支中使用子树来分割您的回购,用一个非常干净的树来组织几个模块。

代码语言:javascript
复制
git subtree split --prefix=docker-image-1 -b docker-image-1-subtree

有关子树的进一步信息,请查看这个职位。我没有时间玩git subtree来给你举个例子,但我想你可以理解这个问题。

所以,作为纯粹主义者,我不推荐使用git submodule,我读过很多人说git subtree很棒,所以我会选择选择2)。但我根本不是一个纯粹主义者和分开的重新定位将轻松码头枢纽自动化,这也是一个CI原则,所以去选择最适合你的需要。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53209370

复制
相关文章

相似问题

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