如何在测试模式下运行Jenkins并禁用所有自动触发器?

时间:2017-12-20 20:34:16

标签: jenkins jenkins-pipeline

我正在尝试找到一种方法来禁用舞台实例上所有jenkins作业的自动作业执行。

我们正在使用jenkins-job-builder来创建和更新超过1000个作业,我想用生产中的相同作业填充一个临时实例,但我想避免在调度程序上触发它们。

到目前为止,我确定了两个需要禁用的来源:

  • 计划安排
  • gerrit trigger

我确实知道哪些禁用作业会产生这种效果,但这也会阻止人们手动触发这些作业,以及暂存实例,这实际上是我想要保持启用的唯一一种作业触发。

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:0)

我只是为确切的用例编写了2个groovy脚本。

停止TimerTrigger和PeriodicTrigger作业:

/**
*
* This script disables all jobs that have TimerTrigger or PeriodicFolderTrigger (WorkflowMultiBranchProject)
*
* */
import jenkins.model.Jenkins
import hudson.model.*
import hudson.triggers.*
import com.cloudbees.hudson.plugins.folder.computed.PeriodicFolderTrigger

def items = Jenkins.instance.getAllItems()
items.each { item ->
    if(item.hasProperty('triggers')){
        item.triggers.values().each { trigger ->
            if(trigger instanceof TimerTrigger || trigger instanceof PeriodicFolderTrigger) {
                println "Disabling project with timer trigger: ${item.name}"
                item.setDisabled(true)
            }
        }
    }
}

停止SCMTrigger作业(想法相同,触发器类不同)

/**
 *
 * This script disables all jobs with SCM trigger
 *
 * */
import jenkins.model.Jenkins
import hudson.model.*
import hudson.triggers.*

def items = Jenkins.instance.getAllItems()
items.each { item ->
    if(item.hasProperty('triggers')){
        item.triggers.values().each { trigger ->
            if(trigger instanceof SCMTrigger) {
                println "Disabling project with SCM trigger: ${item.name}"
                item.setDisabled(true)
            }
        }
    }
}