由于构建时间限制 https://stackoverflow.com/a/34588866/865719在 Docker Hub 上,我决定拆分Dockerfile
将耗时的自动构建分为三个文件。
每一个“子构建”都会在 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 应用程序触发构建step-1
使用 Docker Hub 提供的“构建触发器”URL({"docker_tag": "step-1"}'
添加有效负载)。但是Docker Hub并没有提供自动触发的方式step-2
进而step-3
然后。
如何按各自的顺序自动触发以下构建步骤?**(即,触发step-2
after step-1
完成。然后,触发step-3
after step-2
完成)。
注意:我不想为每个设置单独的存储库step-i
然后使用 Docker Hub 的“存储库链接”链接它们。我只想链接tags在同一个存储库中。
Note:到目前为止,我的解决方案是将 Docker Hub Webhook 附加到我制作的 Web 应用程序。什么时候step-n
完成,(即,使用包含标签名称的 JSON 文件调用我的 Web 应用程序的 URLstep-n
)Web应用程序使用“构建触发器”来触发step-n+1
。它按预期工作,但是,我想知道是否有“更好”的做事方式。
根据肯·科克伦的要求 https://stackoverflow.com/a/36949444/865719, 这里有initial Dockerfile https://github.com/maddouri/cling-ubuntu-docker/blob/175dcc183312e93f7b6b9da826a973bf1c3d880c/Dockerfile以及“构建脚本” https://github.com/maddouri/cling-ubuntu-docker/blob/175dcc183312e93f7b6b9da826a973bf1c3d880c/build-cling.sh它使用的。我只是想 dockerizeCling https://root.cern.ch/cling(C++ 解释器)。需要编译一下LLVM https://en.wikipedia.org/wiki/LLVM, Clang https://en.wikipedia.org/wiki/Clang and Cling https://en.wikipedia.org/wiki/CINT。正如您所期望的,根据机器的不同,它需要几个小时才能完成,而 Docker Hub 最多允许“仅”2 小时构建:) 我稍后添加的“子构建”映像(仍在develop
分支)各自构建整个事物的一部分。我不确定这里还需要进一步优化。
另外,为了测试各种想法(并避免等待几个小时的结果),我进行了设置另一个存储库 https://hub.docker.com/r/maddouri/void-docker具有相似的结构(唯一的区别是它的Dockerfile
s 不做那么多工作)。
更新1: On Option 5 https://stackoverflow.com/a/36949444/865719: 正如预期的那样,curl
from step-1.Dockerfile
已被忽略:
Settings → 构建触发器 → 最后 10 条触发日志
| 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
供大家查看:)(希望 Docker Hub 有一个选项可以使其失效并重新生成另一个)
更新2:这是我目前的尝试 https://github.com/maddouri/dockerhub-trigger-propagate:
它基本上是一个Heroku https://www.heroku.com/- 托管应用程序具有AP调度器 https://apscheduler.readthedocs.io/en/v3.0.5/index.html启动初始构建步骤的定期“触发器”,以及Flask http://flask.pocoo.org/“传播”构建的 Webhook 处理程序(即,它具有构建标记的有序列表。每次 Webhook 调用它时,它都会触发下一个构建步骤)。