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

2023-12-28

由于构建时间限制 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具有相似的结构(唯一的区别是它的Dockerfiles 不做那么多工作)。

更新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 调用它时,它都会触发下一个构建步骤)。


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

  • 创建一个存储库,其中包含每个的构建规则Dockerfile需要建造。

  • 禁用Autobuild依赖存储库中所有构建规则的选项。

  • 添加一个名为的 shell 脚本hooks\post_push在每个包含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
    
  • 对于每个具有依赖项的存储库,添加构建环境变量 named BUILD_TRIGGERS到自动构建,并设置Value每个依赖的自动构建的构建触发器 URL 的逗号分隔列表。

使用此设置,可以将root源存储库将触发构建root图像,一旦完成并被推送post_push钩子将被执行。在钩子中POST https://en.wikipedia.org/wiki/POST_%28HTTP%29对每个依赖存储库构建触发器进行,包含在请求正文中构建的分支或标签的名称。这将导致触发依赖存储库的适当构建规则。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在同一个 Docker Hub 存储库中进行链式自动构建 的相关文章

随机推荐

  • 将 Flex/Bison 与外部程序集成

    我正在开发一个智能代理模型 该模型需要事件列表作为输入 这些事件来自另一个模型的输出 位于 大 文本文件中 文本文件是所有事件的列表 包括我不关心的不必要事件 因此我使用 flex 编写了一个扫描器 可以找到有用的位 智能代理模型的框架已经
  • 为什么Java更喜欢调用双重构造函数?

    public class test test double a System out println in double test Object a System out println in object public static vo
  • Java 8 java.time:在 Instant 与 LocalDateTime 中添加 TemporalUnit

    我正在使用 Java 8 中的新 java time 包 我有一个遗留数据库 它为我提供了java util Date 我将其转换为Instant 我想做的是添加基于另一个数据库标志的一段时间 我可以添加天 周 月或年 我不想关心我要添加的
  • 在 C 中使用二分查找求一个数的平方根

    尝试使用二分搜索计算出数字的平方根 但是我的实现不起作用 我不知道为什么 感谢任何帮助 谢谢 这是我的代码 end 是我想要开平方根的数字的值 while start lt end float mid start end 2 printf
  • 如何安全高效地将SSN存储在数据库中?

    我的主要问题是我想检查具有相同 SSN 的人是否在我们这里有多个帐户 目前 所有个人身份信息均已加密 解密需要相当长的时间 我最初的想法是在数据库的用户列中添加一个 ssn 列 然后我可以简单地执行一个查询 获取具有 ssn 或用户 A 的
  • 将 Excel 工作表导入 phpMyAdmin

    我目前正在使用 phpMyAdmin 并且遇到了问题 当将我的 CSV 导入 phpMyAdmin 时 它会对数字进行四舍五入 我已将列设置为浮点数 并将 Excel 中的列设置为数字 也尝试过文本 常规 但无济于事 有其他人遇到过这个问题
  • 流体宽度固定位置

    Imagine div class outer div class inner div div Where outer是列结构的一部分 其宽度是百分位数 因此是流动的 inner代表一个fixed应填充 100 宽度的位置元素 outer元
  • Python:导入 scipy 导致回溯引用已删除的文件

    当我尝试在 Python 解释器 版本 2 6 1 中导入 scipy 模块 版本 0 11 0b1 时 收到以下错误 Traceback most recent call last File
  • 在 mailto 上打开 Gmail:操作

    如何强制网络浏览器导航到 Gmail 并创建 如果已登录 新信件 并在点击时填写 收件人 字段mailto email protected cdn cgi l email protection 有一个油猴脚本 http blog monst
  • 如何将自定义业务逻辑添加到 Acumatica 框架的 Actions 中?

    我向 SOShipment 添加了一个自定义字段 并且希望在订单输入或通过处理订单屏幕调用 CreateShipment 操作时设置其值 我怎么做 为 SOOrderEntry 创建一个图形扩展并添加一个 Action 方法 如下所示 us
  • 检测 iFrame 中的重定向

    我可能在这里问了错误的问题 所以我将提供一些关于我想要完成的任务的细节 我使用第三方网络应用程序来跟踪支持票证 他们提供了我的用户填写的表单的代码 并将其提交到他们的域 我想在两个不同的域上使用此表单 但不幸的是第三方使用单个硬编码的重定向
  • 如何解决 rmarkdown 中的此错误消息?

    我刚刚开始探索rmarkdown包裹 我不使用Rstudio 我使用默认的 R 环境 我所做的如下 我创建了一个新的 R 文档 开始输入几行rmarkdown格式 保存文件Rmd扩大 我将文件保存在工作目录中 我安装了pandoc使用 pk
  • 我需要在单击后退按钮时最小化 Android 应用程序

    我需要在按下后退按钮时最小化应用程序 我使用以下代码来捕获硬件后退按钮单击事件 帮助我最小化按后退键的代码 Override public boolean onKeyDown int keyCode keyEvent event switc
  • 数据实体 > 领域对象 > ViewModel,每个都有截然不同的数据结构

    这是关于数据实体 域对象和 ViewModel 之间映射的一般问题 我可能问得不对 但希望我能理解它 下面是一个简化的问题 假设我有一个实体框架模型 它 1 1 映射到我的数据库表 但我的域对象可能不相同 并且我的 ViewModel 又完
  • 与“LPCWSTR”类型的参数不兼容

    include stdafx h include
  • 在程序的某些部分显式禁用 MySQL 查询缓存

    在 Django 项目中 一些 cronjob 程序主要用于管理或分析目的 例如生成网站使用统计数据 轮换用户活动日志等 我们可能不希望MySQL在这些程序中缓存查询以节省内存使用并提高查询缓存效率 是否可以在这些程序中显式关闭 MySQL
  • 为什么我的 HTML 文本框在移动设备和桌面上的显示效果不一样?

    由于某种原因 我的 HTML 文本框没有居中 当我在桌面和移动设备上查看它们时 它们的显示方式有所不同 一个被拉伸 而另一个未居中 我可以让我的 HTML 代码在中显示相同吗 两种情况 div div h1 style text align
  • onload 和 Jquery read()。它们适用于任何 DOM 吗?比如table或者div?

    我需要使用 javascript 脚本将动态内容放在 div 上 该 div 位于页面顶部 因此它会先加载 然后再加载其下方的其他内容 而且下面真的有很多东西 因此 当我将脚本放在ready 或onload上时 div将空2 3秒 同时显示
  • 使用 jQuery 删除表格行

    以下是我的代码 Script document ready function click click function table append tr td nbsp td tr remove click function table re
  • 在同一个 Docker Hub 存储库中进行链式自动构建

    由于构建时间限制 https stackoverflow com a 34588866 865719在 Docker Hub 上 我决定拆分Dockerfile将耗时的自动构建分为三个文件 每一个 子构建 都会在 Docker Hub 的时