Jenkins任务批量修改的技巧分享
通过脚本命令行批量修改Jenkins任务
最近,笔者所在团队的Jenkins所在的服务器经常报硬盘空间不足。经查发现很多任务没有设置“丢弃旧的构建”。通知所有的团队检查自己的Jenkins任务有没有设置丢弃旧的构建,有些不现实。
一开始想到的是使用Jenkins的API来实现批量修改所有的Jenkins任务。笔者对这个解决方案不满意,经Google发现有同学和我遇到了同样的问题。他使用的更“技巧”的方式:在Jenkins脚本命令行中,通过执行Groovy代码操作Jenkins任务。
总的来说,就两步:
进入菜单:系统管理-->脚本命令行
在输入框中,粘贴如下代码:
importjenkins.model.Jenkins importhudson.model.Job importjenkins.model.BuildDiscarderProperty importhudson.tasks.LogRotator //遍历所有的任务 Jenkins.instance.allItems(Job).each{job-> if(job.isBuildable()&&job.supportsLogRotator()&&job.getProperty(BuildDiscarderProperty)==null){ println"\"${job.fullDisplayName}\"处理中" job.addProperty(newBuildDiscarderProperty(newLogRotator(2,10,2,10))) println"$job.name已更新" } } return; /** LogRotator构造参数分别为: daysToKeep:Ifnot-1,historyisonlykeptuptothisdays. numToKeep:Ifnot-1,onlythisnumberofbuildlogsarekept. artifactDaysToKeep:Ifnot-1nornull,artifactsareonlykeptuptothisdays. artifactNumToKeep:Ifnot-1nornull,onlythisnumberofbuildshavetheirartifactskept. **/
脚本
脚本命令行介绍
脚本命令行(JenkinsScriptConsole),它是Jenkins的一个特性,允许你在Jenkinsmaster和Jenkinsagent的运行时环境执行任意的Groovy脚本。这意味着,我们可以在脚本命令行中做任何的事情,包括关闭Jenkins,执行操作系统命令rm-rf/(所以不能使用root用户运行Jenkinsagent)等危险操作。
除了上文中的,使用界面来执行Groovy脚本,还可以通过JenkinsHTTPAPI:/script执行。具体操作,请参考官方文档。
问题:代码执行完成后,对任务的修改有没有被持久化?
当我们代码job.addProperty(newBuildDiscarderProperty(newLogRotator(2,10,2,10)))执行后,这个修改到底有没有持久化到文件系统中呢(Jenkins的所有配置默认都持久化在文件系统中)?我们看下hudson.model.Job的源码,在addProperty方法背后是有进行持久化的:
publicvoidaddProperty(JobPropertyjobProp)throwsIOException{ ((JobProperty)jobProp).setOwner(this); properties.add(jobProp); save(); }
小结
本文章只介绍了批量修改“丢弃旧的构建”的配置,如果还希望修改其它配置,可以参考hudson.model.Job源码。
不得不提醒读者朋友,Jenkins脚本命令行是一把双刃剑,大家操作前,请考虑清楚影响范围。如果有必要,请提前做好备份。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。