我们正在使用Bamboo v3.1.1作为我们的持续集成构建服务器,它在大多数情况下运行良好。
我们遇到的一个问题是我们正在进行大量面向数据库的测试,例如:构建在共享数据库实例上执行一些单元和集成测试。
当我们碰巧同时运行同一个构建计划的多个Bamboo构建时,这会导致问题 - 它们在彼此的脚上磕磕绊绊并导致死锁,通常,所有涉及的构建都会因此失败。
因此,虽然并行构建很棒 - 理论上 - 我们真的希望能够定义构建计划来“序列化”构建,例如永远不要并行执行多个构建。
有谁知道我们怎么做?是否有一个设置告诉Bamboo“不要并行化这个构建计划 - 一次只做一个构建,以串行方式”
更新
我的构建过程目前有两个阶段:
“核心构建”可以很容易地并行运行多次 - 没有问题。但是,“测试”阶段不能运行多次,因为其中一些测试访问了一个且只有共享的“单元测试”数据库;如果超过1个“测试”阶段进程正在运行,它们将最终导致彼此死锁。
那么我如何告诉Bamboo可以并行化“核心构建”阶段,但对于“测试”,无论一次运行多少个构建,总是一次只运行一个实例 ??
答案 0 :(得分:2)
埃。有两种方法可以做到这一点:任务和阶段。我的猜测是你想要阶段。
要使您的构建并行运行,您必须在一个阶段内运行多个作业。如果您执行无法并行运行的作业并将它们放在不同的阶段,它们将以串行方式运行。例如,如果您有:
Test Foo Stage:
Init Foo Database Job
Hammer Foo Database Job
Smash Foo Database Job
Test Baz Stage:
Init Baz Database Job
Bamboozle Baz Database Job
Befuddle Baz Database Job
然后foo阶段的Init / Hammer / Smash会并行运行。但是,您可以将每个处于自己的阶段:
Test Foo Init Stage:
Init Foo Database Job
Test Foo Hammer Stage:
Hammer Foo Database Job
Test Foo Smash Stage:
Smash Foo Database Job
Test Baz Init Stage:
Init Baz Database Job
Test Baz Bamboozle Stage:
Bamboozle Baz Database Job
Test Baz Befuddle Stage:
Befuddle Baz Database Job
然后,每个任务将以串行方式运行,而不是并行运行。当然,这有效地限制了您使用一个有用的代理。
如果您真的只想使用单个代理,您可以随时禁用除一个代理之外的所有代理,但这会影响所有构建,因此如果您想要并行运行任何内容,那么这不是一个好主意。 / p>
作为最后的评论,也可以通过任务而不是阶段来获得您想要的位置。连接每个Job的任务,它们将由一个代理串行运行。当然,每个任务都会看到上一个任务中已更改的文件和状态,因此您需要确保它们不会干扰。
答案 1 :(得分:2)
我的方法是将核心构建放在一个计划中,将测试放在另一个计划中。 核心构建将触发测试计划作为子计划。
然后,只要核心构建完成,就会产生测试计划。
核心构建计划可能设置为在许多计算机上并行运行多个实例。 测试计划将仅限于一次运行的单个计划实例。
我唯一的困惑是你说:
核心构建
(构建VS解决方案,将测试数据库更新为最新脚本)
更新测试数据库是否会导致运行测试计划出现问题?