【问题标题】:How can I abort all jobs with a certain name?如何中止具有特定名称的所有作业?
【发布时间】:2019-09-04 17:47:28
【问题描述】:

我正在尝试设置一个脚本来杀死/中止所有具有特定名称的 Jenkins 作业。我很难找到有关 Jenkins 类及其所含内容的文档。

我知道有可用的插件,但我被指示不要使用它们。否则,我在这里(How to stop an unstoppable zombie job on Jenkins without restarting the server?)、(Cancel queued builds and aborting executing builds using Groovy for Jenkins)提到了一些半相关的问题,我试图从这些问题中重新编写一些代码,但这并不会导致工作被终止:

import hudson.model.*

def jobList = Jenkins.instance.queue

jobList.items.findAll { it.task.name.contains('searchTerm') }.each { jobList.kill(it.task) }

我还尝试了以下方法:

def jobname = ""
def buildnum = 85

def job = Jenkins.instance.getItemByFullName(jobname)
 for (build in job.builds) {
     if (buildnum == build.getNumber().toInteger()){
       if (build.isBuilding()){
         build.doStop();
         build.doKill();

       }
     }

}

第一个脚本没有执行硬性任务,而是什么都不做,而第二个脚本抛出 NullPointerException:

java.lang.NullPointerException: Cannot get property 'builds' on null object

【问题讨论】:

    标签: jenkins groovy jenkins-pipeline jenkins-groovy


    【解决方案1】:

    我设法让它工作;我的第二个示例不起作用,因为我脑残,而我正在测试它的工作没有构建。 :(

    def searchTerm = ""
    def matchedJobs = Jenkins.instance.items.findAll { job ->
            job.name.contains(searchTerm)
    def desiredState = "stop"
    
    if (desiredState.equals("stop")) {
                println "Stopping all current builds ${job.name}"
                for (build in job.builds) {
                    if (build.isBuilding()){
                        build.doStop();
                        println build.name + " successfully stopped!"
                    }
                }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-14
      • 2020-02-06
      • 1970-01-01
      • 1970-01-01
      • 2022-10-12
      • 1970-01-01
      • 1970-01-01
      • 2020-06-10
      相关资源
      最近更新 更多