前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jenkins2 学习系列19 -- 使用 Script Console批量修改Jenkins任务

Jenkins2 学习系列19 -- 使用 Script Console批量修改Jenkins任务

作者头像
mafeifan
发布2019-08-12 16:49:43
3.6K0
发布2019-08-12 16:49:43
举报
文章被收录于专栏:finleyMa

原文:http://showme.codes/2019-02-23/jenkins-script-console-in-practice/

通过脚本命令行批量修改Jenkins任务

最近,笔者所在团队的 Jenkins 所在的服务器经常报硬盘空间不足。经查发现很多任务没有设置“丢弃旧的构建”。通知所有的团队检查自己的 Jenkins 任务有没有设置丢弃旧的构建,有些不现实。

一开始想到的是使用 Jenkins 的 API 来实现批量修改所有的 Jenkins 任务。笔者对这个解决方案不满意,经 Google 发现有同学和我遇到了同样的问题。他使用的更“技巧”的方式:在 Jenkins 脚本命令行中,通过执行 Groovy 代码操作 Jenkins 任务。

Script Console 需要对Java和Jenkins相关的API比较熟悉,除了进行管理操作还可以诊断调式Jenkins。建议执行危险操作前先备份好数据。

总的来说,就两步:

  1. 进入菜单:系统管理 –> 脚本命令行

image.png

  1. 在输入框中,粘贴如下代码:

image.png

代码语言:javascript
复制
 import jenkins.model.Jenkins
 import hudson.model.Job
 import jenkins.model.BuildDiscarderProperty
 import hudson.tasks.LogRotator
 // 遍历所有的任务
 Jenkins.instance.allItems(Job).each { job ->

     if ( job.isBuildable() && job.supportsLogRotator() && job.getProperty(BuildDiscarderProperty) == null) {
         println " \"${job.fullDisplayName}\" 处理中"

         job.addProperty(new BuildDiscarderProperty(new LogRotator (2, 10, 2, 10)))
         println "$job.name 已更新"
     }
 }
 return;

 /**
 LogRotator构造参数分别为:
 daysToKeep:  If not -1, history is only kept up to this days.
 numToKeep: If not -1, only this number of build logs are kept.
 artifactDaysToKeep: If not -1 nor null, artifacts are only kept up to this days.
 artifactNumToKeep: If not -1 nor null, only this number of builds have their artifacts kept.
 **/
脚本命令行介绍

脚本命令行(Jenkins Script Console),它是 Jenkins 的一个特性,允许你在 Jenkins master 和 Jenkins agent 的运行时环境执行任意的 Groovy 脚本。这意味着,我们可以在脚本命令行中做任何的事情,包括关闭 Jenkins,执行操作系统命令 rm -rf /(所以不能使用 root 用户运行 Jenkins agent)等危险操作。

除了上文中的,使用界面来执行 Groovy 脚本,还可以通过 Jenkins HTTP API:/script执行。具体操作,请参考 官方文档

问题:代码执行完成后,对任务的修改有没有被持久化?

当我们代码job.addProperty(new BuildDiscarderProperty(new LogRotator (2, 10, 2, 10)))执行后,这个修改到底有没有持久化到文件系统中呢(Jenkins 的所有配置默认都持久化在文件系统中)?我们看下 hudson.model.Job 的源码,在addProperty方法背后是有进行持久化的:

代码语言:javascript
复制
public void addProperty(JobProperty<? super JobT> jobProp) throws IOException {
    ((JobProperty)jobProp).setOwner(this);
    properties.add(jobProp);
    save();
}
小结

本文章只介绍了批量修改“丢弃旧的构建”的配置,如果还希望修改其它配置,可以参考 hudson.model.Job 的 源码

不得不提醒读者朋友,Jenkins 脚本命令行是一把双刃剑,大家操作前,请考虑清楚影响范围。如果有必要,请提前做好备份。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.08.09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 通过脚本命令行批量修改Jenkins任务
  • 脚本命令行介绍
  • 问题:代码执行完成后,对任务的修改有没有被持久化?
  • 小结
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档