TeamCity:防止 2 个构建同时运行

Posted

技术标签:

【中文标题】TeamCity:防止 2 个构建同时运行【英文标题】:TeamCity: Prevent 2 builds from running simultaneously 【发布时间】:2013-01-06 06:00:29 【问题描述】:

我不希望 Build Config A 和 Build Config B 同时运行。这是因为它们共享无法同时访问的相同资源。但是,每个构建配置都由单独的代理运行,因此它们可以同时运行。

相反,我希望一个构建配置在触发时等待另一个构建配置(如果它正在运行)完成。例如,如果 Build Config B 开始运行,但 Build Config A 已经在运行,则 B 将等待 A 完成,然后 B 将运行。

我不认为快照依赖会起作用,因为它假定一个配置依赖于另一个配置,这在我的情况下是不正确的。

【问题讨论】:

为什么不能独立运行?他们会通过共享资源相互干扰吗?你能把它们固定到同一个代理吗? 构建是否总是一起运行?如果是这样,您可以从其中一个构建中删除所有构建触发器,并为其分配一个完成构建解决方案。这将在构建 A 完成后对构建 B 进行排队。也就是说,我仍然喜欢 Matt 的建议,即强制他们在同一个构建代理上运行。 由于共享资源,它们无法独立运行。理想情况下,我会找到解决此问题的方法,但需要进行一些重新配置,因此我希望至少暂时阻止它们同时运行。 在这种情况下,只需在代理选项卡上制定一条规则,它们必须在包含 xxx 的代理名称上运行(无论是什么),然后这些构建只能在该代理上运行并且永远不会运行同时。 【参考方案1】:

Keith,有两个插件可以帮助您: 第一个是Groovy plugin。它具有在所有项目上创建名称锁定的功能。

第二个是TeamCity.SharedResources。它具有定义共享资源并使用读写锁锁定它们的功能。但是,此插件中定义的资源是按项目定义的。我们正在积极开发这个插件,欢迎您在our tracker观看它的页面

【讨论】:

共享资源从 v8.0 开始与 TeamCity 捆绑在一起,因此现在看来是正确的答案。【参考方案2】:

为了快速而肮脏,只需在项目的兼容代理选项卡上制定规则。他们必须在包含 xxx 的代理名称上运行(无论是什么),那么这些构建只能在该代理上运行,并且永远不会同时运行。

【讨论】:

我想如果 TeamCity 有一个针对构建配置的选项,即默认启用的 Enable simultaneous builds,那就太好了。无法想象这将是一个很难编写的插件,如果我有时间,也许我会试一试 - 但是,与此同时,这种解决方法是可以接受的:)【参考方案3】:

在最新版本的 TeamCity 中,您可以配置此参数。进入编辑配置设置->编辑配置设置并设置参数:

限制同时运行的构建数量(0 - 无限制)

【讨论】:

以上是关于TeamCity:防止 2 个构建同时运行的主要内容,如果未能解决你的问题,请参考以下文章

Team City 自定义 NuGet 包还原未发生

使用 maven、teamcity 和 TFS 的分支策略

TeamCity 构建链配置

多阶段部署的 Team City 最佳实践是啥?

带有 Xcode 工作区的 Team City CI - 方案“我的方案”未配置为运行

“ng test”不能同时做覆盖率报告和TeamCity报告