Continuous integration “团队城市”;“完成建造”;没有更改时触发

Continuous integration “团队城市”;“完成建造”;没有更改时触发,continuous-integration,teamcity,teamcity-7.1,Continuous Integration,Teamcity,Teamcity 7.1,在我们的一个项目中,我们在签入时有一个简单的CI构建,另一个构建是在成功完成CI构建时使用“Finish build”触发器来测试安装工具包的创建 如果多个开发人员同时签入,我们可以 1.2个连续的CI构建,然后 2.1个安装工具包构建,包括两个签入,然后 3.另一个安装工具包版本,它与以前的安装工具包版本完全没有任何更改。因此,不需要此版本 显然,这是第二次成功的CI构建启动的,但是如果finish build触发器不包含任何更改,有没有办法不触发它 我可能会将这两个版本合并为一个版本,但这会

在我们的一个项目中,我们在签入时有一个简单的CI构建,另一个构建是在成功完成CI构建时使用“Finish build”触发器来测试安装工具包的创建

如果多个开发人员同时签入,我们可以 1.2个连续的CI构建,然后 2.1个安装工具包构建,包括两个签入,然后 3.另一个安装工具包版本,它与以前的安装工具包版本完全没有任何更改。因此,不需要此版本

显然,这是第二次成功的CI构建启动的,但是如果finish build触发器不包含任何更改,有没有办法不触发它


我可能会将这两个版本合并为一个版本,但这会增加CI版本所需的时间(目前为2分钟),因此会增加知道简单CI版本已被破坏所需的时间(11分钟)

我假设您的安装工具包版本具有以下配置:

  • 将“完成生成触发器”设置为CI生成,以便每次成功完成CI生成时,安装工具包生成都将运行
  • VCS根目录,以便每次运行安装工具包时,它都从VCS获取自己的源代码
问题是,如果CI生成需要两分钟,并且在该生成过程中有更多CI更改,则安装工具包生成将使用启动时的源,而不是触发CI生成的源。触发构建的不是VCS更改,而是CI项目,因此它与是否存在VCS更改无关

快照依赖关系
你所缺少的是一份工作。这可以通过“依赖项”配置步骤(#6)实现。这仍将执行项目触发器,但会导致CI生成和安装工具包生成使用来自相同时间戳的相同源代码。您仍将获得两个安装工具包版本,但每个版本都将与CI版本直接相关

安静时段
因为每个成功的CI生成都会触发安装工具包生成,所以另一个选项是减少CI生成的数量。通过在CI构建上启用,CI只有在X时间内发生更改且没有任何新提交时才会启动。“发生了更改。让我们等待30秒,看看是否还有更多更改。如果没有新的更改,我们将触发生成。”这会将两次提交放在单个CI生成上,从而生成单个安装工具包生成


类似地,您可以删除安装工具包上的Finish Build触发器,并将其更改为具有静默期的VCS触发器;将静默期设置为略大于CI项目运行所需的时间。这仍然允许您为每次提交创建一个CI构建,但当有许多快速提交时,会将安装工具包构建组合在一起。缺点是它将不再与成功的CI构建相关。因此,在2分钟后(无论您的静默期是什么),没有新的更改,安装工具包将启动,即使CI构建处于失败状态。

啊,好的,谢谢Jay,这很有意义。如果自上次安装工具包生成以来没有任何更改,是否无法将其设置为不触发安装工具包生成?我只是想减少不需要的构建。CI生成成功将触发安装工具包。不考虑VCS状态。CI是“先检查更改,然后开始生成”,而安装程序是“先开始生成,然后检查更改”。在检查VCS的更改之前,构建已经在进行中,TeamCity无法取消构建。我添加了一个静默期描述作为进一步的替代方案。这也不理想,但可能是更好的选择。