如果服务器/资源不可用,则停止所有作业

时间:2014-04-03 11:28:16

标签: jenkins

我们正在使用Jenkins不断构建大量项目,这些项目都将部署在Application Server(Weblogic或Glassfish)上。现在有时这些服务器已关闭或不可用(在开发环境中),因此所有这些作业在部署或集成测试阶段都会失败。

我们想要实现的是一种机制,它显示“服务器关闭”错误并停止所有相关作业,而不是让所有作业最终变为红色。最好是这可以独立于作业进行配置,因此我们不必为每个作业添加预构建步骤或类似步骤。

有人知道有助于我们实现此目标的方法或插件吗?

2 个答案:

答案 0 :(得分:2)

不触摸任何工作配置:
您可以转到Manage Jenkins - > Prepare for Shutdown
这样做会在Jenkins之上发出一条红色消息,阻止执行任何新作业,并允许任何现有作业完成。您可以选择使用cancel这个链接,该链接将显示在执行者列表的上方。不用担心,服务器实际上不会关机。

任何作业都不需要配置,但这会影响整个Jenkins服务器。

最小的工作配置更改:
在与主服务器相同的计算机上设置slave。将所有特定作业分配给该从站。您可以手动启动从属offline。与该从站关联的任何作业都将排队,但在从站重新联机之前不会执行。我相信有一些插件可以让你通过其他工作使奴隶在线/离线。

您可以将一组相关作业分组到该奴隶,而不会影响整个Jenkins,而且它们会自动恢复。

重量级重量:
Heavy Job plugin Priority Sorter plugin 结合使用 使用Heavy Job插件,配置1个将连续运行的虚拟作业(甚至让它检查服务器的状态,并仅在它们重新联机时退出)。给它足够的重量"重量重的"占用节点上的所有执行程序。这样,当作业运行时,它将阻止任何其他作业运行(它们将排队等待执行程序)。此外,使用优先级排序器,使其具有比任何其他作业更高的绝对优先级,以便首先触发它。现在,当您的Dev服务器关闭时,只需启动此工作。

使用上面的配置,这将再次影响整个Jenkins。但是您可以将其与slave方法结合使用,因此您只会影响该从属节点上的选定作业组。

答案 1 :(得分:1)

Slav的优秀提案开始,我们最终使用Exclusive Execution pluginPriority Sorter plugin

独占执行插件将Jenkins设置为"准备关机"模式,它阻止任何其他作业在队列中等待任何从属或本地执行程序执行,同时让当前正在运行的作业正常结束。这是在您使用标记"独占执行"标记的作业的预构建阶段执行的。在此阶段,工作也将等到当前正在运行的工作完成。之后,作业将执行其构建阶段。我的情况是,我们调用一个shell脚本,等待我们的主开发服务器(SVN和Maven存储库)重新联机。在构建后阶段"准备关机"模式被取消,因此队列中的待处理作业可以继续执行。

我们希望我们的虚拟作业在我们的开发服务器的备份过程开始的同时运行,因此我们每天都在固定的时间(没有" H" s)安排它。

为了立即执行我们的虚拟工作,我们将其标记为具有最高优先级(级别1,默认值为3),与Slav提出的方式相同。

这种方法比斯拉夫的方法有一对优势:

  • 只需一个作业,所有Jenkins环境(包括所有从属设备)都将暂停 。在我们的例子中,我们有一个主要的Jenkins实例,有10个执行器来运行不同的作业类型(从单元测试到自动构建和部署)和两个专用的slave只能运行功能测试(使用TestExecute)。我们希望它们都能中断开发服务器备份上的执行。

  • 没有工作或子工作可以超越我们的虚拟项目 。当使用繁重的作业插件时,虚拟作业必须等到所有执行程序都是空闲的,因此在发生这种情况时,其他等待的作业可能会超过其执行。这是具有轴执行(并行),多工作或从其他作业触发的作业的作业的情况(我们有一点点的一切)。我们希望在服务器脱机时完全停止新的执行。