There are times that you need to disable all jobs on a Jenkins server. Especially when you’ve made a backup copy for testing or other purposes. You do not want jobs to start executing from that second server before you’re ready. Sure you can start Jenkins in quiet mode but sometime you have to exit it and scheduled jobs will start running. What can you do?
Well, there are plenty of pages that show Groovy code that allows you to stop jobs, and there are even suggestions to locate and change every config.xml
file by running something like sed -i 's/disabled>false/disabled>true/' config.xml
on each of them. Or even better use the Configuration Slicing plugin. Firstly, you may feel uneasy to mass change all config.xml
file from a process external to Jenkins. Secondly, the Configuration Slicing plugin does not give you a "select all option" nor does it handle Multibranch Pipeline jobs. Thirdly, the Groovy scripts I’ve found shared by others online, also do not handle Pipelines and Multibranch Pipelines. If you’re based on Multibranch Pipelines, you’re kind of stuck then. Or you have to go and manually disable each one of them.
Thankfully there’s a solution using Jenkins’s REST API and python-jenkins. An example follows:
import jenkins
server = jenkins.Jenkins('http://127.0.0.1:8080/',
timeout=3600,
username=USERNAME,
password=PASSWORD)
all_jobs = server.get_all_jobs()
for j in range(len(all_jobs)):
try:
server.disable_job(all_jobs[j]['fullname'])
except Exception as e:
print(all_jobs[j]['fullname'])
I hope it helps you out maintaining your Jenkins.