gpt4 book ai didi

heroku - 在同一个 Docker Hub 存储库中链式自动构建

转载 作者:行者123 更新时间:2023-12-01 02:00:27 24 4
gpt4 key购买 nike

由于在 Docker Hub 上构建 time restrictions,我决定将耗时的自动构建的 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 应用程序使用 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 的“存储库链接”链接它们。 我只想在同一个存储库中链接 标签
    注意: 到目前为止,我的解决方案是将 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++解释器)。它需要编译 LLVMClangCling 。正如您所料,根据机器的不同,它需要几个小时才能完成,而 Docker Hub 最多允许“仅”2 小时构建 :) 我稍后添加的“子构建”图像(仍在 develop 分支中) ) 构建整个事物的一部分。我不确定这里是否有任何进一步的优化。
    此外,为了测试各种想法(并避免为结果等待 h 小时),我设置了具有类似结构的 another repository (唯一的区别是它的 Dockerfile 没有做太多的工作)。
    更新 1:Option 5 上:正如预期的那样,来自 curlstep-1.Dockerfile 已被忽略:
    设置 → 构建触发器 → 最后 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 |
    这种方法的另一个问题是,它需要我将构建触发器的( secret ) token 放在 Dockerfile 中供所有人查看:)(希望 Docker Hub 可以选择使其无效并重新生成另一个)
    更新 2: 这是 my current attempt:
    它基本上是一个 Heroku 托管的应用程序,它有一个 APScheduler 周期性“触发器”来启动初始构建步骤,以及一个 Flask Webhook 处理程序“传播”构建(即,它具有构建标签的有序列表。每次它是由 webhook 调用,它会触发下一个构建步骤)。

    最佳答案

    我最近对链接依赖构建有相同的要求,并使用 Docker Cloud 自动构建以这种方式实现:

  • 为每个 Dockerfile 创建一个包含构建规则的存储库那需要 build 。
  • 禁用Autobuild依赖存储库中所有构建规则的选项。
  • 添加一个名为 hooks\post_push 的 shell 脚本在每个包含 Dockerfile 的目录中具有以下代码的依赖项:
      for url in $(echo $BUILD_TRIGGERS | sed "s/,/ /g"); do
    curl -X POST -H "Content-Type: application/json" --data "{ \"build\": true, \"source_name\": \"$SOURCE_BRANCH\" }" $url
    done
  • 对于每个具有依赖项的存储库,添加一个名为 BUILD_TRIGGERS 的构建环境变量自动构建,并设置Value到每个依赖自动构建的构建触发 URL 的逗号分隔列表。

  • 使用此设置,推送到根源存储库将触发根镜像的构建,一旦完成并被推送到 post_push钩子(Hook)将被执行。中钩 POST对每个依赖存储库构建触发器进行,包含请求正文中构建的分支或标签的名称。这将触发依赖存储库的适当构建规则。

    关于heroku - 在同一个 Docker Hub 存储库中链式自动构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36948145/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com