我正在尝试找到一种方法来禁用舞台实例上所有jenkins作业的自动作业执行。
我们正在使用jenkins-job-builder来创建和更新超过1000个作业,我想用生产中的相同作业填充一个临时实例,但我想避免在调度程序上触发它们。
到目前为止,我确定了两个需要禁用的来源:
我确实知道哪些禁用作业会产生这种效果,但这也会阻止人们手动触发这些作业,以及暂存实例,这实际上是我想要保持启用的唯一一种作业触发。
有没有办法实现这个目标?
答案 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)
}
}
}
}