由于Docker Hub上的构建时间限制,我决定将耗时的自动构建的< code>Dockerfile分成三个文件。这些“子构建”中的每一个都在Docker Hub的时间限制内完成。
我现在在同一个存储库中进行了以下设置:
| branch | dockerfile | tag |
| ------ | ------------------ | ------ |
| master | /step-1.Dockerfile | step-1 |
| master | /step-2.Dockerfile | step-2 |
| master | /step-3.Dockerfile | step-3 |
这些图像按照以下顺序相互构建:
步骤-1.Dockerfile
: FROM ubuntu
步骤-2。Dockerfile
: 从我/复杂图像:步骤-1
步骤-3.Dockerfile
: 来自我/复杂图像:步骤-2
一个单独的 Web 应用程序使用 Docker Hub 提供的“生成触发器”URL 触发步骤 1
的生成(向该 URL 添加了 {“docker_tag”:“步骤 1”}“
的有效负载)。但是,Docker Hub 不提供自动触发步骤 2
和之后触发步骤 3
的方法。
我怎样才能自动按顺序触发下面的构建步骤?**(即,在< code >步骤-1完成后触发< code >步骤-2。然后,在< code >步骤-2完成后,触发< code >步骤-3。
注意:我不想为每个step-i
设置单独的存储库,然后使用Docker Hub的“存储库链接”链接它们我只想链接同一个存储库中的标签。
注意:到目前为止,我的解决方案是将Docker Hub Webhook连接到我制作的web应用程序。当step-n
完成时(即使用包含标记名step-n
的JSON文件调用我的web应用程序的URL),web应用程序使用“构建触发器”触发
。它如预期的那样工作,然而,我想知道是否有一种“更好”的做事方式。
根据 Ken Cochrane 的要求,以下是初始的 Dockerfile
以及它使用的“构建脚本”。我只是试图将克林(C语言解释器)区分开来。它需要编译LLVM,叮当声和克林。如您所料,根据计算机的不同,它需要几个小时才能完成此操作,并且 Docker Hub 最多允许“仅”2 小时的构建:)我后来添加的“子构建”映像(仍在开发
分支中)构建了整个事物的一部分。我不确定这里是否有任何进一步的优化。
此外,为了测试各种想法(并避免等待h小时的结果),我设置了另一个具有类似结构的存储库(唯一的区别是它的Dockerfile
不做太多工作)。
更新1:在选项5上:正如预期的那样,step-1.Dockerfile
中的curl
已被忽略:
设置→ 生成触发器→ 最近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:这是我目前的尝试:它基本上是一个Heroku托管的应用程序,有一个启动初始构建步骤的APScheduler周期性“触发器”,和一个“传播”构建的Flask webhook处理程序(即,它有构建标签的有序列表。每次它被webhook调用时,都会触发下一个构建步骤)。
可以通过调整 Docker Hub 存储库中的“生成设置”来执行此操作。
首先,为 /step-1 创建自动生成。
GitHub 存储库的泊坞文件,带有标记步骤 1
。这个不需要任何特殊设置。
接下来,为< code>/step-2创建另一个自动化构建。Dockerfile,标签为< code>step-2。在构建设置中,取消选中激活时,构建将在推送时自动发生。还要添加一个指向< code>me/step-1的存储库链接。
对step-3
执行相同操作(将其链接到me/step-2
)。
现在,当您推送到GitHub存储库时,它将触发第1步进行构建;完成后,第2步将构建,之后,第3步将构建。
请注意,您需要等待前一阶段成功构建一次,然后才能向其添加存储库链接。
构建需要多长时间?你能张贴你的docker文件吗?
选项1:找出自动化构建花费了这么长时间的原因,看看为什么没有及时完成。如果你把它贴在这里,我们可以看看你能做些什么来优化。
选项2:是您现在已经在做的事情,使用第3方应用程序按给定顺序触发构建。
选项3:我不确定这是否适合您,因为您正在使用相同的存储库,但通常您会将存储库链接用于此功能,然后链接它们,当一个完成时,下一个触发器触发第一个。但是,由于您有一个存储库,因此它将不起作用。
选项4:将其拆分为多个回购,然后您可以使用回购链接。
选项5:完全黑客攻击,最后的手段(不确定它是否会起作用)。在 Dockerfile 的最后一行添加一个 CURL 语句,以发布到存储库的生成触发器链接,其中包含用于下一步的给定标记。如果需要一个标记用于下一个标记,则可能需要在下一步中添加睡眠,以等待推送完成推送到中心。
老实说,最好的选择是选项1:你正在做的事情应该能够在规定的时间内完成,你可能正在做一些我们可以优化的事情,以使整个事情更快。如果你在时间限制内完成,那么其他一切都不需要了。
我最近也有同样的需求来链接依赖的构建,并通过使用Docker Cloud自动化构建实现了这一点:
>
为需要构建的每个 Docker 文件
创建一个包含构建规则的存储库。
对相关资料库中的所有构建规则禁用< code>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的逗号分隔列表。
使用这种设置,对根源存储库的推送将触发根映像的构建,一旦完成并被推送,将执行< code>post_push
挂钩。在钩子中,向每个依赖的存储库构建触发器发送一个POST,包含在请求体中构建的分支或标记的名称。这将导致相关存储库的适当构建规则被触发。
在 Docker Hub 中,可以通过单击“”选项卡右上角的相应按钮来配置自动生成。除了在推送到包含 的源代码存储库时配置重建之外,还可以将“存储库链接”设置为“为基本映像启用”。这旨在“每当在 Docker Hub 上更新基本映像时,都会在此存储库中触发构建”。 我在一些简单的玩具示例中实现了这个功能。但它无法触发一个更复杂的例子。我的看起来像这样: 如果(任一)基本映像更新,为什么不会触发重建
在自动化的dockerhub构建过程中,是否有一种方法可以连接到多个私有git回购?我们正在构建golang应用程序,需要‘去获取’其他私人回购作为我们构建的一部分,目前他们失败了,因为docker无法连接到他们,只有目标私人回购。 主回购很好,因为部署密钥是通过Dockerhub安装的,但是任何后续的私有回购导入都失败了。
当我们在spring mvc中使用crud存储库时,会出现以下错误
我必须修复以下错误。任何人都可以帮忙 严重:StandardWrapper.Throwable org.SpringFramework.Beans.Factory.BeanCreationException:创建名为“Search Controller”的bean时出错:注入autowired依赖项失败;嵌套异常为org.springframework.beans.factory.beanCrea
问题内容: 如何在类内创建和实例化jpa存储库?我处于一种情况,必须为通用类中的不同实体创建存储库。 对于Neo4j存储库,我可以轻松地做到这一点,例如, 对于JpaRepository,我检查了文档并发现了这一点, 我不确定如何在以上代码中实例化工厂。 还不能通过指定域类来像创建Neo4j一样创建存储库吗? 问题答案: 我终于以这种方式工作了, 通过SimpleJpaRepository,我可以
我想在GitHub上创建一个存储库,以集中我迄今为止创建的所有自定义s。我还想独立地自动化Docker Hub上每个映像的构建。 GitHub上有许多类似的存储库: https://github.com/tianon/dockerfiles https://github.com/vimagick/dockerfiles (我不会在这里谈论最星号的存储库:https://github.com/jes