在同一个 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 存储库中进行链式自动构建 的相关文章

  • 关于多客户端和可定制 Web 应用程序的架构所需的建议[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Rails:CSRF 令牌不工作但已设置

    我在 Heroku 上有我的 Rails 3 应用程序 当我发送银行信息时 我得到 WARNING Can t verify CSRF token authenticity但我的 CSRF 令牌已设置 https gist github c
  • 在 docker 中将 pgadmin 连接到 postgres

    我有一个docker compose与服务文件python nginx postgres and pgadmin services postgres image postgres 9 6 env file env volumes postg
  • 如何使用 Compose 创建具有用户定义的 IP 和 MAC 地址的 Docker macvlan

    我有一个使用 MAC 地址执行硬件许可证的 Docker 项目 我无法更改此设置 ISV 使用包含 MAC 地址的硬件指纹 我正在尝试创建一个 macvlan 网络 它将使用物理适配器并从我的网络 DHCP 服务器获取 IP 地址 或者我将
  • 我需要启用哪些权限才能使 Docker 卷正常工作?

    假设我有一个保存一些数据的 Docker 容器 我希望这些数据能够持续存在 如果容器被停止 删除 升级等 我仍然希望数据位于主机操作系统文件系统上的可访问位置 目前 我的解决方案是创建一个目录 srv service name在我的主机上
  • 仅打印“docker-container ls -la”输出中的“Names”列

    发出时docker container ls la命令 输出如下所示 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a67f0c2b1769 busybox tail f dev
  • docker中CREATED容器是什么意思?

    我有点困惑docker容器的状态 尤其是与状态为已创建 我知道当容器正在运行状态如下所示 root labadmin VirtualBox RAGHU DOCKER docker ps CONTAINER ID IMAGE COMMAND
  • 针对容器优化操作系统的 GCP 云监控

    我在用着GCP计算引擎 with 容器优化操作系统 我启用了Logging and 监控就那个例子而言 日志记录和监控具有写权限 但总是显示不适用于代理在监控仪表板中 If I SSH在我的实例中并运行docker images然后我看到输
  • wildfly-logstash 不将日志发送到logstash

    我正在使用 jboss keycloak 11 0 2 和 wildfly logstash https github com kifj wildfly logstash https github com kifj wildfly logs
  • AWS Cloudfront 作为具有自定义域的 Heroku 站点的 CDN

    最近 我从 AWS Route 53 brianpatrickhummel com 购买了一个域来托管个人投资组合 该投资组合网站已启动并正在运行 使用 S3 存储桶和 Cloudfront 作为 CDN 在作品集网站上 访问者可以预览我构
  • ServletContext getContextPath()

    我检查了我的 Netbeans 项目中包含的 Tomcat 库的 javadoc 当我部署代码时工作正常 但是当我对我的 Web 项目进行全新构建时 我在 getContextPath 上收到 找不到符号 ServletContext接口的
  • docker 容器无法启动,因为现有的 pid 文件

    当我启动 docker 容器时 它会失败 因为现有的 pid 文件 root newhope sergio docker logs sharp shockley httpd pid 1 already running httpd pid 1
  • 使用 Docker 在本地主机上的“requests”连接错误

    我正在尝试开发客户端服务器应用程序 但遇到了一些问题 我的两个服务都是在单独的 docker 容器中本地开发的 客户端使用 api 从 api 获取数据requestspython 库 它可以在生产中使用 但在本地 我无法使用 reques
  • 如何从本地运行的docker容器访问Azure Keyvault?

    我有一个包含 ASP NET Core 应用程序的 docker 映像 该应用程序使用 Azure Key Vault 来访问连接字符串等内容 当我在本地运行图像时 出现以下错误 Unhandled Exception Microsoft
  • 容器中的 JVM 计算处理器错误?

    最近我又做了一些研究 偶然发现了这一点 在向 OpenJDK 团队抱怨之前 我想看看是否有其他人观察到这一点 或者不同意我的结论 因此 众所周知 JVM 长期以来忽略了应用于 cgroup 的内存限制 众所周知 现在从 Java 8 更新某
  • Docker 教程入门第 4 部分连接被拒绝

    我不明白我错过了什么 docker compose yml version 3 services web replace username repo tag with your name and image details image sv
  • 纯基于网络的版本控制系统

    我的托管服务当前不允许在其服务器上运行 允许 svn git cvs 我真的希望能够将我的开发计算机上的当前源代码与我的生产服务器 同步 我正在寻找一个纯php python ruby版本控制系统 不只是一个client对于版本控制系统 不
  • docker 容器是否即时获取代码更改?

    我已经启动并运行了我的 docker 容器 有一个容器运行一些 python 代码 我发现它导致了一些错误 我想将一些代码行 主要是更多日志 添加到该特定容器内的 python 脚本中 我想进入容器docker exec ti contai
  • 热重载在docker中运行的java程序

    我开发了一个java程序 应该在docker中运行 然而 我在调试docker中运行的java程序时遇到了很多痛苦 我在网上搜索 一些教程提出了像 spring dev tools 这样的工具 因为我的java程序是基于spring boo
  • Redis+Docker+Django - 错误 111 连接被拒绝

    我正在尝试使用 Redis 作为使用 Docker Compose 的 Django 项目的 Celery 代理 我无法弄清楚我到底做错了什么 但尽管控制台日志消息告诉我 Redis 正在运行并接受连接 事实上 当我这样做时 docker

随机推荐

  • 将 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 的时