由于Docker Hub上的build time restrictions,我决定将耗时的自动构建的Dockerfile
拆分为3个文件。 这些“子版本”中的每一个都在Docker Hub的时间限制内完成。在同一个Docker Hub存储库中链式自动构建
我现在同一个版本库中的以下设置:
| branch | dockerfile | tag |
| ------ | ------------------ | ------ |
| master | /step-1.Dockerfile | step-1 |
| master | /step-2.Dockerfile | step-2 |
| master | /step-3.Dockerfile | step-3 |
的图像按以下顺序互为基础:
step-1.Dockerfile
:FROM ubuntu
step-2.Dockerfile
:FROM me/complex-image:step-1
step-3.Dockerfile
:FROM me/complex-image:step-2
一个单独的web应用程序使用Docker Hub提供的“构建触发器”URL触发构建step-1
。 (其中添加了{"docker_tag": "step-1"}'
负载)但是,Docker Hub不提供自动触发step-2
,然后step-3
后缀的方法。
问:如何自动按照各自的顺序触发以下构建步骤?(即触发step-2
后step-1
完成之后,触发step-3
后step-2
结束)
注:我不想为每个step-i
然后使用泊坞集线器的连接它们设置不同的版本库“库链接。”我只是想链接标签在同一回购协议。
注意:到现在为止,我的解决方案是将Docker Hub Webhook连接到我制作的Web应用程序。当step-n
完成时(即使用包含标记名称step-n
的JSON调用我的Web应用程序的URL),Web应用程序使用“构建触发器”触发step-n+1
。它按预期工作,但是,我想知道是否有一种“更好”的做事方式。
编辑:As requested by Ken Cochrane这里是initial Dockerfile
以及它所使用的"build script"。我只是试图dockerize Cling。 (一个C++解释器)它需要编译llvm,clang和cling。正如你所期望的,根据不同的机器上,它需要几个小时的话,和泊坞枢纽允许“只” 2小时建立在最:)我在develop
分支后来添加的(仍然是“子建”图像)分别构建整个事物的一部分。我不确定这里是否有进一步的优化。
此外,为了测试各种想法(和避免等待H-小时的结果)我有安装another repo具有类似的结构。(唯一的区别是,它的Dockerfile
■不要做尽可能多的工作)
更新1:上Option 5:如预期,从step-1.Dockerfile
的curl
已被忽略:
Settings > Build Triggers > Last 10 Trigger Logs
| Date/Time | IP Address | Status | Status Description | Request Body | Build Request |
| ------------------------- | --------------- | ------- | ------------------------ | -------------------------- | ------------- |
| April 30th, 2016, 1:18 am | <my.ip.v4.addr> | ignored | Ignored, build throttle. | {u'docker_tag': u'step-2'} | null |
另一个问题这种方法是,它要求我把构建触发的(秘密)令牌在Dockerfile
给大家看看:)(希望,多克尔中心有一个选项,以使它无效并重新生成另一个)
更新2:这里是my current attempt: 它基本上是一个Heroku -hosted的应用程序,具有APScheduler周期性“触发”启动该初始构建步骤和Flask网络挂接处理程序“传播”构建。 (即它有构建标签的有序列表,每次被webhook调用时,它会触发下一个构建步骤),我将在业余时间继续完成这个工作。 (欢迎提出建议:))
忘记了触发标记。您应该能够从构建触发器页面重新生成一个新的。 –
我认为你的用例是唯一的,所以你的自定义web应用程序来处理它,是最好的选择。随时接上github并链接到它,以便其他人可以查看并提供反馈。不要担心成为初学者,我们都开始在某个地方:) –