【发布时间】:2021-01-20 23:29:53
【问题描述】:
我有一个 TeamCity 构建项目,它使用十几个 Docker 容器的构建版本参数化 docker-compose.yml 模板,因此为了从每个容器中获取 build_counter,我将它们设置为 docker 中的快照依赖项-撰写构建作业。每个容器的 Dockerfile 和其他文件都在自己的 BitBucket 存储库中,并且它们具有相应文件的触发器。在 docker-compose 构建的快照依赖项中,我将它们设置为“如果有合适的构建,则不要运行新构建”,但它仍然尝试运行所有依赖构建,即使它们各自没有任何变化回购。
这使得应该非常简单和快速的构建变成了一个非常长的构建。通常情况下,其中一个依赖构建会因“无法收集更改:连接被拒绝”而失败,我怀疑这与 TC 试图同时访问所有这些不同的存储库有关。
每次运行 docker-compose 构建时我可以做些什么来不触发每个依赖项的构建?
编辑:
以下是 docker-compose.yml.j2 的示例:http://termbin.com/b2xy
显然,我已经对其进行了清理以便共享,我们真正的 docker-compose 模板列出了大约十几个服务。
以下是其中一项服务的 Dockerfile 示例:http://termbin.com/upins
【问题讨论】:
-
当所有存储库都在构建时,TC 是否显示任何存储库中的未决更改?
-
不,它们都显示“没有变化”。
-
你能分享一个 dockerfile 吗?有些命令会使构建缓存无效并导致所有后续命令再次运行而不是命中缓存。
-
我编辑了问题以包含示例。
-
可能有帮助,您可能已经使用 RTFM。 Snapshot Dependencies。这里的一些东西解释了为什么 compose 构建配置没有将任何 Dockerfile 构建配置计算为“合适的”
标签: docker docker-compose teamcity bitbucket