32

我有两个共享数据库的 Jenkins 项目。它们不能同时运行。严格来说,除了非并发之外,它们之间没有特别的依赖关系,但目前我通过在另一个“下游”运行一个“下游”来部分管理这个约束。这在大多数情况下都有效,但并非总是如此。如果在第二个运行时发生源代码控制更改,第一个将再次启动,并且它们将同时运行并且可能都失败了。

这与如何防止某些 Jenkins 作业同时运行类似但不完全相同?不同之处在于我没有“线程数”问题——我已经在任何时候最多只运行任何给定项目的一个线程,即使在两个(不同项目)构建 stomp 的情况下彼此。这似乎排除了该线程中的所有几个建议。

4

4 回答 4

26

Locks and Latches 插件应该可以解决您的问题。创建一个锁并让两个作业使用相同的锁。这将阻止作业同时运行。

  1. 在“管理 Jenkins:管理插件”中安装插件。
  2. 在“管理 Jenkins:配置系统”中定义(提供名称)您的锁。
  3. 对于您要参与排除的每项工作,
    1. 在“:配置:构建环境”中,勾选“锁”,
    2. 并从下拉列表中选择您的锁名称。
于 2012-04-12T04:58:33.003 回答
12

锁定资源插件。2016 年 5 月,对我来说简单且效果很好。

安装插件。在管理 Jenkins > 配置系统中,转到可锁定资源管理器。
选择添加可锁定资源。输入字段值:名称并点击保存。警告:请勿在名称字段中输入空格。

在 Jenkins > job_name > Configure > General 中,选择复选框:此构建需要可锁定的资源。在字段值中输入一个或多个名称:资源。

开始构建。在 build # number下选择 Locked Resources。您应该会看到类似:此构建已锁定以下资源:resource_name - resource_description

启动使用相同资源的不同构建。您将在 Jenkins 状态/菜单中看到显示作业名称的构建队列。悬停文本显示 Started by、Waiting for resources resources_list、Waiting for time

(也可以使用资源标签/标签)

添加作业配置页面的屏幕截图,因为某些用户似乎存在“此构建需要可锁定资源”不可见的问题:** 当未选中该复选框时,您应该只看到“[_] 此构建需要可锁定资源” 在此处输入图像描述

于 2016-05-11T15:08:17.283 回答
5

编辑:以下信息自 2014 年 4 月 10 日起生效

排除插件,https: //wiki.jenkins-ci.org/display/JENKINS/Exclusion-Plugin 如果很少有构建使用相同的资源 - 例如测试数据库,则非常有用。您需要做的就是使用此资源更新所有作业的配置,因此它们永远不会并行运行,而是等待其他作业完成。

取自:http ://www.kaczanowscy.pl/tomek/2012-07/jenkins-plugins-part-iii-towards-continuous-delivery

这个插件确实阻止了两个或多个作业并行运行。
要测试,请为 job1 执行此操作

  1. 配置
  2. 在构建环境下选中“添加资源以管理排除”。
  3. 然后添加 -> 新资源 -> 名称 -> 锁定
  4. 在构建 - > 添加构建步骤
  5. 关键块启动
  6. 添加构建步骤->添加您想要添加的任何内容。(添加 sleep 15 以确保它持续更长的时间来检查并发性。)
  7. 添加构建步骤 -> 关键块结束
  8. 对 job2 重复上述步骤,确保使用相同的锁名称“lock”。
  9. 同时手动构建两个作业。
  10. 在 jenkins -> Exclusion 管理下监控运行进度。
于 2014-04-10T23:23:15.440 回答
1

2021 年 12 月 1 日
使用Build Blocker插件,安装自Manage Jenkins > Plugin Manager 使用 Jenkins UI 安装 Blocker 插件

例如,您有两个管道React-build和 React -tests: 如果我不需要与当前作业同时运行,则将其添加到阻塞列表中
React-build -> Configure -> Block build
React-testsReact-build

也可以使用正则表达式,即避免所有以 开头的项目同时构建React-,添加React-.*到列表中,

React-tests替换为您不想并行运行的任何管道名称,使用全局或节点级别选项, 阻止构建设置

当尝试将任何被阻止的作业与配置的React-build作业一起运行时,它会进入挂起状态, 待处理的并发构建

于 2021-12-01T10:00:58.270 回答