Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何阻止TeamCity每次都重建docker依赖关系?_Docker_Docker Compose_Teamcity_Bitbucket - Fatal编程技术网

如何阻止TeamCity每次都重建docker依赖关系?

如何阻止TeamCity每次都重建docker依赖关系?,docker,docker-compose,teamcity,bitbucket,Docker,Docker Compose,Teamcity,Bitbucket,我有一个TeamCity构建项目,该项目使用十几个docker容器的构建版本参数化docker-compose.yml模板,因此为了从每个容器获取构建计数器,我在docker compose构建作业中将它们设置为快照依赖项。每个容器的Dockerfile和其他文件都位于各自的BitBucket repo中,并且它们具有相应文件的触发器。在docker compose build中的快照依赖项中,我将它们设置为“如果有合适的版本,则不运行新版本”,但它仍然尝试运行所有依赖的版本,即使它们各自的re

我有一个TeamCity构建项目,该项目使用十几个docker容器的构建版本参数化docker-compose.yml模板,因此为了从每个容器获取构建计数器,我在docker compose构建作业中将它们设置为快照依赖项。每个容器的Dockerfile和其他文件都位于各自的BitBucket repo中,并且它们具有相应文件的触发器。在docker compose build中的快照依赖项中,我将它们设置为“如果有合适的版本,则不运行新版本”,但它仍然尝试运行所有依赖的版本,即使它们各自的repo中没有任何更改

这使得应该是非常简单和快速的构建成为非常长的构建。通常情况下,其中一个依赖构建会因“无法收集更改:连接被拒绝”而失败,我怀疑这与TC试图同时命中所有这些不同的repo有关

我是否可以在每次运行docker compose构建时不触发每个依赖项的构建

编辑:

下面是docker-compose.yml.j2的示例:

显然,我已经对它进行了清理以供共享,我们真正的docker compose模板列出了十几个服务


这里是一个服务的示例DOCKFILE:

,而不是每次更改你的构建的源代码(参数化的DOCKeCopy.YML)和每次构建时的蛮力,你可以考虑独立地构建容器,同时用版本增量和标签来标记它们。生成后,将图像存储在本地注册表中。使用docker compose来满足您的运行时需求。docker compose可以使用多个yaml文件,因此如果您需要特定构建的其他图像,只需拉取所需的其他图像即可。对于生产,请使用另一个yaml文件,该文件构成要运行的系统。将标签添加到Dockerfile。请参阅,以获取一组适合您需要的标签。

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

其基本思想是,依赖项用于代码的同步修订:也就是说,如果您在某个时间构建Compose,它不仅需要在该时间点使用其自己的源代码版本,还需要使用来自该时间点的所有依赖项的代码,不管是否有重大变化

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


如果您的依赖项没有更改,并且没有显示挂起的更改,那么它们不应该生成。在这种情况下,您需要勾选“如果有合适的版本,请不要运行新版本”。“强制修订同步”有点让人困惑。如果勾选,它将查找触发生成后与第一个生成匹配的旧生成。如果取消选中,它可以使用较新的版本。

当所有repo都在生成时,TC是否在任何存储库中显示挂起的更改?否,它们都显示“无更改”。您可以共享dockerfile吗?有些命令会使生成缓存无效,并导致以下所有命令重新运行,而不是命中缓存。我编辑了该问题以包含示例。可能有帮助,可能您已经使用RTFM。这里的内容解释了为什么compose构建配置没有将Dockerfile构建配置计算为“合适”我不确定我是否理解您的建议。目前,容器正在单独的TC项目中构建,但docker compose构建项目需要知道每个容器上次成功构建的构建计数器,因此我们将它们设置为快照依赖项。您是否建议让每个容器构建作业生成自己的docker compose代码段,然后在运行时使用“-f”选项来docker compose合并它们?另外,我编辑了这个问题,提供了一些我们正在做的事情的例子。你的堆栈起初不清楚。我建议不要使用快照,因为这些快照随时都可能更改,因此每次都会导致生成(特别是对于package.json依赖项),构建映像并标记它们,这样您就可以依赖注册表中的版本而不是其他生成。换句话说,de-couple.TC有单独的线程监视repo,并将触发所有涉及的构建。TC不监视我所知的Nexus。好的,但是如果我删除快照依赖项,我将无法从docker compose build中的docker build中访问生成计数器变量(即,%dep.MyProject\u AServiceBuild.build.counter%)。还有其他方法引用这些变量吗?更新了我的答案,在Dockerfile中包含了标签的使用