如何阻止TeamCity每次重建docker依赖项?

时间:2018-05-02 13:32:16

标签: docker docker-compose teamcity bitbucket

我有一个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

2 个答案:

答案 0 :(得分:0)

您可以考虑独立构建容器,同时使用版本增量和标签标记容器,而不是更改构建的源代码(参数化docker-compose.yml)并强制构建您的构建。构建后将图像存储在本地注册表中。使用docker-compose来满足您的运行时需求。 docker-compose可以使用多个yaml文件,因此如果您需要特定版本的其他图像,只需拉动您需要的其他图像。对于生产使用另一个组成要运行的系统的yaml文件。将LABEL添加到Dockerfile。有关适合您需求的一组标签,请参阅http://label-schema.org//rc1/

答案 1 :(得分:0)

我知道这是个老问题,但我遇到了这个问题,你不能做听起来合理的事情,即在不重建的情况下获得最近的绿色版本。部分原因在于 Jetbrains 设计快照依赖项的目的。

基本思想是依赖是针对代码的同步修订:也就是说,如果你在某个时间构建 Compose,它不仅需要在那个时间点使用它自己的源代码版本,还需要使用它的代码也来自那个时间点的所有依赖项,无论是否有任何重大变化。

在我的例子中,总是有变化,因为同一个 repo 被用于许多项目,并且有不相关的变化,这些变化不会触发构建,但会使项目出现在后面并导致构建。

如果您的依赖项未更改且未显示未决更改,则不应构建它们。在这种情况下,您需要勾选“如果有合适的版本,则不要运行新版本”。 “强制修订同步”有点令人困惑。如果勾选,它将在您的构建被触发后找到与第一个构建匹配的旧构建。如果未选中,则可以使用较新的版本。