【问题标题】:Anyway to stop 2008 and 2012 Visual Studio builds mixing through TeamCity?无论如何要停止 2008 和 2012 Visual Studio 通过 TeamCity 构建混合?
【发布时间】:2016-01-22 19:23:58
【问题描述】:

我有一个带有 C++ dll、lib 和 exe 的旧系统。 我们根据 2008 年或 2012 年构建。

很明显,如果 2008 dll 通过 TeamCity 意外添加到 2012 构建中。那会很糟糕。崩溃。反之亦然。

那么有没有人知道让 TeamCity 阻止这种情况发生的方法。我觉得这一定是可能的,因为 TeamCity 运行构建并且因此“知道”每个工件是如何创建的。肯定有某种方法可以创建一条规则或类似“此版本只有 2008 年的工件,否则会出错”之类的规则?

我可以设置 TeamCity 来阻止意外的 2008 和 2012 构建混合发生吗? (不使用魔法)。

塔!

例子:

My2008TeamCity 构建(使用 2008 构建的产品) 需要工件 a2008、b2008、c2008

My2012TeamCity 构建(使用 2012 构建的产品) 需要工件 a2012、b2012、c2012

工件是 DLL,仅在运行时加载。

最近我们运行了 My2008TeamCity 构建。 一些工件被错误地设置,通过 TeamCity 来自 2012 年的构建。 即 a2012 作为工件添加到 2008 版本中。

由于 DLL 仅在运行时加载运行,因此直到手动运行代码并命中该部分代码时我们才注意到问题。

现在想象一个巨大的系统,有大量的工件,许多开发人员不断地在子项目上工作……突然感觉需要一些可以防止这种情况发生的东西。

理想情况下,我希望 TeamCity 说“不是这个工件是针对 2012 年构建的,而您正在运行 2008 年的构建”并且构建失败。所以我们可以修复它。 X

【问题讨论】:

    标签: c++ visual-studio teamcity


    【解决方案1】:

    我不太确定,您是否在一个解决方案中使用了所有这些?您可以使用 VCS 的单独文件夹(构建配置设置\版本控制设置\编辑签出规则),对于配置“2012”,仅从 VCS 获取此文件夹。

    【讨论】:

    • 好主意,但我认为这不能解决我的问题。在 TeamCity 上,我有一个构建,它汇集了许多工件。我想要确保所有 dll 工件都使用相同的 VS 版本构建,因此它们以相同的 C++ 可重新分发为目标。
    • 嗯.. 2008 年和 2012 年在解决方案中制作 2 个项目,并在其中包含另一个项目。接下来,在 TC 中而不是构建解决方案尝试为构建 2008 和 2012 项目进行 2 个构建步骤?或者,也许,你可以展示问题的例子?
    • 我添加了一个示例。希望进一步澄清我的问题。 (以及为什么您的出色建议不起作用)。