【问题标题】:avoid that builders will run at the same time in buildbot避免构建器同时在 buildbot 中运行
【发布时间】:2014-05-26 02:25:19
【问题描述】:

我需要从服务器获取数据,这需要时间;通常是 30 分钟或更长时间。

我有一个从该服务器获取数据的构建器;如果我仍在运行此构建器,我希望此从站上没有其他构建器将运行。完成后,其他构建器可以同时运行,尊重我与最大并发构建相关的设置。

我如何实现这一目标?我在看锁,但手册没有一个明确的例子来说明如何设置一个构建器来阻止所有其他锁,直到完成。

有没有人可以使用示例来设置我的配置,以及每个部分的去向?谢谢

【问题讨论】:

    标签: buildbot


    【解决方案1】:

    一个锁的例子是:

    import sys
    from buildbot import locks
    build_lock = locks.SlaveLock("slave_builds",
                                 maxCount=sys.maxint)
    
    c['builders'].append(BuilderConfig(name=exclusive_builder,
                                       slavenames=['my_slave'],
                                       factory=my_factory,
                                       locks=[build_lock.access('exclusive')]))
    c['builders'].append(BuilderConfig(name=other_builder,
                                       slavenames=['my_slave'],
                                       factory=my_other_factory,
                                       locks=[build_lock.access('counting')]))
    

    具有此锁的构建将具有对从属设备的独占访问权限。 Interlocks section of the documentation中没有解释不好,更复杂的例子

    【讨论】:

    • 感谢 Hitwen,终于有了一个清晰的示例,说明当您想要锁定构建器而不是数据库时会是什么样子。尽管如此,锁似乎没有兑现;我在构建器中添加了 locks 行,该行在完成之前必须具有独占访问权限,然后重新启动(没有错误),但是如果具有锁的构建器正在运行,我仍然会看到其他构建器同时运行。我应该在日志上专门寻找一些东西吗?
    • 尝试在锁定义中设置 maxCount=sys.maxint 并将 locks=[build_lock.access('counting')] 添加到在同一从属中运行的其余构建器。如果这不起作用,您可能不得不在邮件列表中询问
    • 所以,如果我只将锁放在我想单独运行的构建器上,它似乎是行不通的。如果我还添加对所有其他构建器的计数,并将其设置为 1,它就可以工作。不确定这是否是预期的行为,但它现在正在兑现锁(这对我来说不是;我希望我需要指出哪个构建器拥有锁;而其他构建器可以同时运行)。非常感谢!
    • 似乎不使用锁的建造者只是忽略它
    • 是的,对我来说这没什么意义,为什么它不尊重锁。逻辑会要求您只需要指定哪个构建器或步骤具有锁,而其他构建器将遵循配置文件中的最大并发构建参数。
    猜你喜欢
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 2013-10-26
    相关资源
    最近更新 更多