Верхній відповідь майже працював для мене, але у мене була одна серйозна проблема: у мене була дуже велика кількість (~ 100) робочих місць зомбі з - за особливо погано ймеру Дженкінс, тому вручну знайти потрібне ім'я завдання номер збірки кожного і кожна робота із зомбі, а потім ручне їх вбивство було нездійсненним. Ось як я автоматично знайшов і вбив зомбі-роботи:
Jenkins.instance.getItemByFullName(multibranchPipelineProjectName).getItems().each { repository->
repository.getItems().each { branch->
branch.builds.each { build->
if (build.getResult().equals(null)) {
build.doKill()
}
}
}
}
Цей скрипт перебирає всі складання всіх завдань і використовує getResult().equals(null)
для визначення того, закінчила чи ні робота. Збірка, яка знаходиться в черзі, але ще не запущена, не буде повторена (оскільки цієї збірки не буде job.builds
), і завершена вже складена конструкція поверне щось інше, ніж null
для build.getResult()
. Легально виконана робота також матиме результат нарощуванняnull
, тому переконайтеся, що у вас немає запущених завдань, які ви не хочете вбивати, перш ніж виконувати цю .
Кілька вкладених циклів в основному необхідні для виявлення кожної гілки / PR для кожного сховища в проекті багатогалузевого трубопроводу; якщо ви не використовуєте багатогалузеві трубопроводи, ви можете просто переглядати всі ваші завдання безпосередньо чимось подібним Jenkins.instance.getItems().each
.