我有一个Jenkins作业,它在Jenkins之外启动了一个长时间运行的过程。这项工作本身由Gerrit触发。阻止已触发的Jenkins作业,直到* Jenkins完成*
如果在长时间运行过程中再次触发此作业,我需要确保作业保留在Jenkins队列中,直到完成所有过程。实际上,我希望确保这项工作永远不会与自己并行运作,而“工作”真的是詹金斯的工作以及外部长期运行的过程。
我找不到任何方法来实现这一点。外部资源调度程序插件似乎可以工作,但每次我们在我们的系统上配置它时,Jenkins都非常不稳定(拒绝页面加载数分钟,奴隶线程与NPE相遇)。我可以看到的其他所有内容(例如Exclusions插件)都依赖于Jenkins本身来控制整个工作。
我试过用节点标签篡改某些东西 - 让作业依赖于标签“can_run”,将该标签分配给主控,然后让该作业执行一个从主控中移除该标签的Groovy脚本。 (理论上,Jenkins的另一项工作是将标签添加回来,这将在长时间运行的过程结束时触发)。但是这并不奏效:如果Jenkins上有任何排队的工作实例,他们就会去即使标签已被删除,也立即开始。
我不知道还有什么要尝试!是否有其他任何比所需的节点标签丢失,这将导致詹金斯队列工作,如果它被触发,但不是开始它?