0

在我们的一个项目中,我们在签入时有一个简单的 CI 构建,另一个构建用于测试在成功完成 CI 构建时使用“完成构建”触发器触发的设置工具包的创建。

如果多个开发人员同时签入,我们可以获得 1. 2 个连续的 CI 构建,然后是 2. 1 个包含两个签入的安装套件构建,然后 3. 另一个完全不包含任何更改的安装套件构建以前的安装套件构建。因此不需要此构建。

显然,这是由第二次成功的 CI 构建开始的,但是如果完成构建触发器不包含任何更改,有什么方法可以不触发它?

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

4

1 回答 1

1

我假设您的安装套件构建具有以下配置:

  • 将“完成构建触发器”设置为 CI 构建,以便每次成功完成 CI 构建时,都会运行安装工具包构建。
  • 一个 VCS Root,以便每次运行 Setup Kit 时,它都会从 VCS 获取自己的源。

问题是,如果 CI 构建需要两分钟,并且在该构建期间有更多 CI 更改,则 Setup Kit 构建将使用启动时的源,而不是触发 CI 构建的源。触发构建的不是 VCS 更改,而是 CI 项目,因此它与是否存在 VCS 更改无关。

Snapshot Dependencies
您缺少的是Snapshot Dependency。这可通过“依赖项”配置步骤 (#6) 获得。这仍然会触发项目,但会导致 CI​​ 构建和设置工具包构建使用来自相同时间戳的相同源代码。您仍将获得两个 Setup Kit 构建,但每个构建都将直接与一个 CI 构建相关联。

静默期
因为每次成功的 CI 构建都会触发设置工具包构建,另一个选择是减少 CI 构建的数量。通过在 CI 构建上启用安静期,CI 只会在发生更改并且 X 时间没有任何新提交时启动。“有些东西变了,让我们等30秒,看看有没有更多的变化。如果没有什么新的东西,我们就会触发构建。” 这会将两个提交放在一个 CI 构建上,这将导致一个安装工具包构建。

同样,您可以在 Setup Kit 上移除 Finish Build 触发器,并将其更改为具有静默期的 VCS Trigger;将静默期设置为略长于 CI 项目运行所需的时间。这仍然允许您为每个提交创建一个 CI 构建,但是当有许多快速提交时,会将 Setup Kit 构建组合在一起。缺点是它将不再与成功的 CI 构建相关联。因此,在没有新更改的 2 分钟后(无论您的静默期是多少),即使 CI 构建处于失败状态,Setup Kit 也会触发。

于 2013-09-05T14:54:47.373 回答