我需要创建一个Jenkins管道来定期清除构建队列。我有一个可以在脚本控制台中运行的脚本,但是当我试图在管道中运行它时,它不起作用。
def q = Jenkins.instance.queue for (queued in Jenkins.instance.queue.items) { q.cancel(queued.task) }
我很确定它与导入类有关,但是我在编写这个脚本时遇到了问题。
如果你只是想从管道中清除整个构建队列,你可以使用Jenkins queue对象的clear
方法,它将清除整个构建队列:
Jenkins.instance.queue.clear()
注意:你可能会得到一个RejectedAccessException: Scripts not permitted to use method
错误时运行这个脚本,这意味着詹金斯管理员将不得不批准它。
此外,如果您在声明性管道中运行此代码,请确保使用script
指令对其进行扭曲。
如果你使用Jenkins共享库,你可以在你的库中创建一个更通用的clearBuildQueue
函数,然后在你的各种管道中使用它。
它可以看起来像:
@NonCPS
def clearBuildQueue(String pattern = ''){
def queue = Jenkins.instance.queue
if(pattern) {
queue.items.findAll { it.task.name =~ pattern}.each {
println "Item '${it.task.name}' was cleared from the queue"
queue.cancel(it.task)
}
}
else {
println "Clearing ${queue.items.length} items from the queue"
queue.clear()
}
}