首页 > 解决方案 > 工件依赖性仅适用于触发构建的构建

问题描述

在 TeamCity 中,您可以设置Artifact Dependencies。这使您可以将另一个构建中的工件复制到当前构建中。

我正在尝试将其与打包构建一起使用。基本上,我有一堆创建容器的构建。容器构建完成后,我希望触发打包构建。打包构建将基于触发它的容器构建创建 Helm 图表。(我有权限和关注点分离的原因将其排除在容器构建之外。)

所以我进入了我的容器构建模板,并让它们输出包构建所需的东西作为构建工件(版本、容器映像名称等)。

然后,我在我的每个容器构建上使用 Artifact Dependencies 设置打包构建。这就是我观察到的情况:

  1. 运行其中一个容器构建。
  2. 它完成并保存了它的工件。
  3. 包构建上的触发器看到容器构建完成并触发包构建。
  4. 打包构建开始并将所有容器构建中的工件复制到其构建文件夹中。
  5. 混乱和悲伤,因为包构建不知道哪个构建导致它触发。

问题是当我运行容器构建时,它会将所有容器构建中的工件复制到包构建中。

如何仅从触发包构建的容器构建中获取信息(而不是所有依赖项?

标签: teamcity

解决方案


您不能:根据定义,工件依赖项是您需要的信息。

我不确定这是否回答了您提出的问题(或您没有回答的问题):这不是 TeamCity 和工件的工作方式。

这是“官方”的 TeamCity 方式:对于您的每个create-container构建,写

  • 一个create-container构建,配置了 VCS 但未触发
  • 一个package-container构建,与
    • 配置相同的 VCS
    • 一个 VCS 触发器(曾经在create-container构建中的那个)
    • 上的快照依赖create-container:这将确保此构建使用与之前版本相同的 VCS 版本create-container运行
    • 一个工件依赖于相应的create-container.

触发时,package-container会等待对应的create-container构建成功完成,然后运行。

如果同时运行不同package-container的构建是一个问题:查看 TeamCity 的共享资源构建功能(创建并使用一个quota: 1)。

至于package-container构建:而不是复制构建 N 次,只需Action ..从第一个中提取模板并基于此创建 N-1 个其他模板。您需要更改每个依赖项,但如果您随后需要更改它们,只需对Template遗嘱进行简单更改即可。


推荐阅读