unit-testing - "Serialize" Bamboo 构建?

标签 unit-testing bamboo parallel-builds

我们使用 Bamboo v3.1.1 作为我们的持续集成构建服务器,它运行良好 - 大多数时候。

我们遇到的一个问题是我们正在进行大量面向数据库的测试,例如构建在共享数据库实例上执行一些单元和集成测试。

当我们碰巧有多个 Bamboo 构建同时运行相同的构建计划时,这会导致问题 - 它们相互绊倒并导致死锁,通常,所有涉及的构建都会因此失败。

因此,虽然并行构建很棒——理论上——我们真的希望能够定义一个构建计划来“序列化”构建,例如永远不要并行执行多个构建。

有谁知道我们该怎么做??是否有设置告诉 Bamboo“不要并行化这个构建计划 - 一次只做一个构建,以串行方式”

更新:

我的构建过程目前有两个阶段:

  • 核心构建(构建 VS 解决方案,将测试数据库更新为最新脚本)
  • 测试(NUnit 2.4)

  • “核心构建”可以轻松地并行运行多次 - 没有问题。然而,“测试”阶段不能 运行不止一次,因为其中一些测试访问一个且唯一共享的“单元测试”数据库;如果有 1 个以上的“测试”阶段进程正在运行,它们最终会彼此陷入僵局。

    那么我如何告诉 Bamboo 可以并行化“核心构建”阶段,但对于“测试”,始终只运行 一个实例一次,无论运行多少个构建??

    最佳答案

    是的。有两种方法可以做到这一点:任务和阶段。我的猜测是你想要阶段。

    要让您的构建并行运行,您必须在一个阶段内运行多个作业。如果您将无法并行运行的作业放在不同的阶段,它们将串行运行。例如,如果您有:

    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
    

    然后,每个任务将串行运行,而不是并行运行。当然,这有效地将您限制为单个有用的代理。

    如果您真的只想使用一个代理,您可以始终禁用除一个代理之外的所有代理,但这会影响所有构建,因此如果您想要并行运行任何内容,这不是一个好主意。

    作为最后的评论,也可以通过任务而不是阶段来达到你想要的地方。连接来自每个作业的任务,它们将由单个代理串行运行。当然,每个任务都会看到前一个任务中更改的文件和状态,因此您需要确保它们不会干扰。

    关于unit-testing - "Serialize" Bamboo 构建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7900827/

    相关文章:

    java - Junit 和 EasyMock 理解澄清

    java - 发布时找不到资源包

    makefile - 限制子make中的并发

    linux - 并行make : set -j8 as the default option

    java - 在子类测试之前从 JUnit 基类运行测试

    unit-testing - 如何在不引入风险的情况下测试遗留应用程序(并采用测试驱动开发)?

    Bamboo 不想创造神器

    powershell - Bamboo变量是否可以自动用作环境变量?

    jenkins - 您可以拥有多少个 Jenkins Executor?

    c# - 什么时候使用 Mock v. Stub,或者什么都不用?