【发布时间】:2011-09-13 17:35:26
【问题描述】:
我在 Jenkins 有一些工作,使用 Selenium 通过网站的前端修改数据库。如果其中一些作业同时运行,可能会导致由于脏读而导致的错误。有没有办法强制 Jenkins 中的某些工作无法同时运行?我宁愿不必在数据库上放置或获取锁,它可以被任意数量的同时进行测试的用户读取或修改。
【问题讨论】:
我在 Jenkins 有一些工作,使用 Selenium 通过网站的前端修改数据库。如果其中一些作业同时运行,可能会导致由于脏读而导致的错误。有没有办法强制 Jenkins 中的某些工作无法同时运行?我宁愿不必在数据库上放置或获取锁,它可以被任意数量的同时进行测试的用户读取或修改。
【问题讨论】:
您需要 Throttle Concurrent Builds 插件,它可以让您定义全局和每个节点的信号量。
锁定和闩锁正在 deprecated 支持 Throttle Concurrent 构建。
【讨论】:
我已经尝试了locks & latches 插件和port allocator 插件作为实现您想要做的事情的方法。两者都不适合我。锁和闩锁有时会起作用,但我偶尔会被吊死。除非您有多个 jenkins 节点,否则将端口分配器用作 hack 将起作用,但配置开销有点高。我最终决定的是另一个 hack,但它工作可靠并且使用核心 Jenkins 东西(无插件):
由于从属服务器只有一个执行程序,与其相关的作业永远不会一起运行。
【讨论】:
如果您将数据库视为只能以独占方式使用的共享资源,那么这适合 Lockable resources plugin 的用例。
它正在积极开发和改进中,用途广泛。
【讨论】: