一尘不染

Jenkins作业运行系统的Groovy脚本如何响应用户杀死

jenkins

我有一个长期运行的System
Groovy脚本,它可以启动数以万计的其他构建。为了不使构建队列过长(这将使UI无法使用),它将监视构建队列的长度。如果构建队列长于给定的阈值,它将不会启动任何新的构建并休眠一分钟。

问题是,此脚本无法响应用户的kill操作。当用户单击UI上的“杀死此构建”按钮时,什么也没有发生。我想知道是否有一种方法可以让系统Groovy脚本检查是否应该终止当前版本,因此它将退出睡眠并等待循环?

我尝试监视Executor.shouldRun(),但是用户的kill操作不会更改它。


阅读 227

收藏
2020-07-25

共1个答案

一尘不染

我过去曾调查过“杀死”按钮的问题。我的理解是,杀死信号实际上是立即发送给工作的。但是,如果该工作在其他API(或类似的东西)中很忙,则无法保证将其提取。但是,kill信号将不会被存储,否则作业将立即对其做出反应,否则将被忽略。睡眠一分钟可能就是这种情况。

因此,作为一种变通办法,我将创建自己的机制来向您的脚本发出信号,告知它应该停止。这可以通过将文件放置到特定位置(例如,groovy脚本作业的工作空间)来完成。这可以通过第二项作业称为Kill_job_1来完成。现在,在您的工作开始休眠之前(或在唤醒之后),您检查该文件是否存在,如果找到该文件,则结束脚本。当您第二次开始工作时,请不要忘记确保已清理文件。

2020-07-25