阻止触发的Jenkins作业,直到* Jenkins外部的某些内容完成

时间:2014-02-11 09:32:57

标签: jenkins

我有一个Jenkins工作,在Jenkins之外开始一个长期运行的过程。这项工作本身是由格里特引发的。

如果在长时间运行的进程中再次触发此作业,我需要确保该作业保留在Jenkins队列中,直到所述进程完成。实际上,我希望确保作业永远不会与自身并行运行,因为“工作”真的是Jenkins的工作加上外部长期运行的过程。

我找不到任何方法来实现这一目标。外部资源调度程序插件似乎可以工作,但每次我在我们的系统上配置它时,Jenkins都非常不稳定(拒绝页面加载几分钟,奴隶线程死于NPE)。我能看到的其他所有内容,例如Exclusions插件,都取决于Jenkins本身控制整个作业。

我尝试将某些东西与节点标签混合在一起 - 让作业依赖于标签“can_run”,将该标签分配给master,然后让作业执行Groovy脚本,从master中删除该标签。 (理论上会有另一个Jenkins作业将标签添加回来,这将在长时间运行的过程结束时触发。)但它不起作用:如果在Jenkins上有任何排队的作业实例,他们去了即使标签已被删除,也要马上开始。

我不知道还有什么可尝试的!除了缺少必需的节点标签之外还有什么不会导致Jenkins在触发时排队该作业,而不是 start 它?

1 个答案:

答案 0 :(得分:0)

我想长时间运行的过程会被触发,你的作业会立即返回,这会使它成为一个异步过程,对吧?我建议你在触发过程中处理长时间运行的过程检测和等待逻辑。每次触发作业之前,请检查长时间运行的进程是否正在运行,如果没有,则触发它。

实际上我并没有得到你想要做的事情。基本上由于长时间运行的过程,你不可能并行运行2个作业。如果是这样,请将其作为非并行作业。