【问题标题】:TeamCity "Finish Build" trigger fires when no changesTeamCity“完成构建”触发器在没有更改时触发
【发布时间】:2013-09-05 11:02:47
【问题描述】:

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

如果多个开发者同时签到,我们可以得到 1. 2 个连续的 CI 构建,然后 2. 1 个安装套件构建,其中包括 both 签入,然后 3. 另一个安装套件版本,与之前的安装套件版本相比没有任何更改。因此不需要此构建。

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

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

【问题讨论】:

    标签: continuous-integration teamcity teamcity-7.1


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 啊,好的,谢谢杰,这很​​有道理。如果自上次安装套件构建以来没有任何更改,是否可以将其设置为不触发安装套件构建?我只是想减少不必要的构建。
    • 没有。设置工具包由 CI 构建成功触发。没有考虑 VCS 状态。 CI 是“检查更改然后开始构建”,而设置是“开始构建然后检查更改。”。在检查 VCS 是否有更改之前,构建已经在进行中,并且 TeamCity 无法取消启动构建。
    • 我添加了一个安静时期的描述作为进一步的选择。这也不理想,但可能是更好的选择。
    猜你喜欢
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    相关资源
    最近更新 更多