我们大多会选择 Jenkins 来部署我们的持续集成/测试/交互系统,但是当我们需要做 Jenkins 相关服务的维护时可以怎么做呢?笔者摸索了如下的一些方案:

基础方法——Jenkins Script Console

Jenkins Script Console 是 Jenkins 设计来在 Jenkins Server 或者 Slave Nodes 上执行任意的 scripts的。该功能的入口在 “Manage Jenkins” 之中,也可以直接通过 http://server/jenkins/script 来访问。

Jenkins Script Console 除了能执行各种指令外,最为重要的是它具备远程控制的能力:

$ curl -d "script=<your_script_here>" http://jenkins/script
$ # or
$ curl -d "script=<your_script_here>" http://jenkins/scriptText

或者,也可以将本地工作空间的脚本通过如下的方式传至 Jenkins Script Console:

$ curl --data-urlencode "script=$(<./somescript.groovy)" http://jenkins/scriptText

如果想了解更多关于 Jenkins Script Console 的信息,可以直接查看官方文档。

常用 Jenkins Script

以下给出的均是笔者使用过的一些 Groovy Scripts。

定时检查各 Node 的磁盘剩余空间

for (node in jenkins.model.Jenkins.instance.nodes) {computer = node.toComputer()if (node.toComputer().online) {size = hudson.node_monitors.DiskSpaceMonitor.DESCRIPTOR.get(computer).sizeroundedSize = size / (1024 * 1024 * 1024) as intprintln("node: " + node.getDisplayName() + ", free space: " + roundedSize + "GB")}
}

查看某个时间段内的所有 Build

import hudson.model.AbstractBuild
import hudson.model.AbstractProject
import java.text.SimpleDateFormatdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")starttime = new GregorianCalendar()
endtime = new GregorianCalendar()
buildEnd = new GregorianCalendar()starttime.setTime(df.parse("2016-12-01 00:00:00"))
endtime.setTime(df.parse("2016-12-01 23:59:59"))for (AbstractProject p : hudson.model.Hudson.instance.projects) {for (AbstractBuild b : p.getBuilds()) {if (b == null) breakif (b.isBuilding() || b.timestamp >= endtime) continuebuildEnd.setTimeInMillis(b.timestamp.getTimeInMillis() + b.duration)if (buildEnd < starttime) breakprintln b}
}

清理部分已经长时间未构建的 Job

import hudson.model.AbstractProjectint days = 30
Date xDaysAgo = new Date(((long) new Date().time - (1000L * 60 * 60 * 24 * days)))jenkins = jenkins.model.Jenkins.instance
jobs = jenkins.items.findAll { job ->(job instanceof AbstractProject && job.disabled && (job.lastSuccessfulBuild?.time?.before(xDaysAgo) || job.lastSuccessfulBuild == null))
}int count = 0
jobs.each { job ->println "Deleting ${job.name}. It's lastSuccessfulBuild is ${job.lastSuccessfulBuild?.time}"job.delete()count++
}println "\nDeleted ${count} jobs.\n"

摸索 Jenkins 的自动维护方案相关推荐

  1. Tomcat Jenkins iOS自动打包

    Tomcat Jenkins iOS自动打包 Jenkins 可以配合测试人员或者 CI 打包,主要作用是提供打包页面选择和参数传递,最后导出 ipa 包. 打包方式有如下几种 借助 Jenkins ...

  2. Log4Net日志分类和自动维护

    背景 在程序中,我们调试运行时信息,Log4Net是一个不错的解决方案.不知道是我用的不好,用到最后反而都不想看日志了.原因是因为我n个功能使用的默认的Logger来记录日志,这样以来,所有功能记录的 ...

  3. 怎么把项目推到gitlab上_Gitlab利用Webhook+jenkins实现自动构建与部署

    之前部署了Gitlab的代码托管平台和Jenkins的代码发布平台.通常是开发后的代码先推到Gitlab上管理,然后在Jenkins里通过脚本构建代码发布. 这种方式每次在发版的时候,需要人工去执行j ...

  4. oracle 11g中的自动维护任务管理

    因为人员紧缺,最近又忙着去搞性能优化的事情,有时候真的是不想再搞这个事情,只是没办法,我当前的绩效几乎取决于这个项目的最终成绩,所以不管是人的事还是事的事,都得去让他顺利推进. 前段时间发生还有几台服 ...

  5. 计算机机房网络维护日志,机房网络设备维护方案.doc

    机房网络设备维护方案 机房网络设备维护方案篇一:机房设备维护方案(3482字) 一.维护目的保障机房设备正常运行,过对机房环境支撑系统.监控设备.计算机主机设备定期检测.维护和保养,保障机房设备运行稳 ...

  6. 【无人驾驶】“自主代客泊车”/自动泊车方案调研 2

    目录 智行者发布自主代客泊车(AVP)方案 中电昆辰"鹰眼"定位(射频定位.UWB) 百度自主泊车解决方案 纵目科技 驭势科技 纽劢科技 Momenta 魔视智能 吉利 魔视智能 ...

  7. GIt+jenkins代码自动上线

    代码自动上线功能 企业部署代码上线是件比较麻烦的事情,还好我们有jenkins这个持续集成的软件可以帮助我们做很多的事情,现在我们就 来测试用jenkins推送代码上线. 我们这里测试的是一个html ...

  8. 【论文】ROS系统的无人小车自动跟随方案研究

    这个专栏是专注于入了职场之后,对写论文能力要求和技巧经验的一些总结. 在职场不同于在学习等科研院所,更多要求的是发出论文,而不是发高水平论文. 文章列表: [程序员读论文]为什么要读论文? [程序员读 ...

  9. 蓄电池分级分段维护方案

    随着通信产业的发展,通信网络中需要用到的基础后备电源--蓄电池组的数量也越来越多,各大通信运营商虽然已经投入了大量的人力和物力对其进行必要的维护,但每年因为蓄电池组的质量问题引起的事故和造成的资源浪费 ...

最新文章

  1. ROS系统——部署OpenVINO版Nanodet超轻量目标检测器
  2. 【Java面试题】54 去掉一个Vector集合中重复的元素
  3. java stringbuffer 转数组_JAVA之旅(十七)——StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder...
  4. hdu 2553 N皇后问题(深度递归搜索)
  5. PHP算法导出Excel实现字段联动
  6. GetLastInputInfo 判断离开状态
  7. php的常量和变量的区别,变量和常量的区别_在php当中常量和变量的区别
  8. void*和void类型
  9. DBA常用的一些视图和sql
  10. C#药店进销存管理系统,源码分享
  11. 把Matlab的p代码还原为可读的m代码的可能性
  12. 电容的耐压值选择---陶瓷电容、钽电容、电解电容
  13. 阿里资深架构师推荐:浅谈异地多活及阿里云容灾经验分享
  14. Android实习周记:第八周,职场里有真感情吗?我的回答是T_T
  15. java基础复习——day18(Stream流 ; 反射)
  16. npm scripts
  17. mysql数据库备份备份命令
  18. python||报错‘gbk‘ codec can‘t decode byte 0x80 in position 8: illegal multibyte sequence
  19. 作为Gatekeeper,请守好交付质量关口(Quality Gate)
  20. 162号段,165号段,167号段

热门文章

  1. 【uni-app】App实现二维码分享图合成(支持单张或多张)
  2. 神一样的编程语言? -- 发现一个编程语言“shen”
  3. XML Publisher 模板
  4. android使用wifi连接android手机
  5. Win11上手初体验,文末附Win10升级Win11方法
  6. 【安全资讯】《网络产品安全漏洞管理规定》出台,漏洞披露者的紧箍咒?
  7. python 发送字节,python发送字节数据,, 1 # Contr
  8. Centos7配置阿里云DNS
  9. 微访谈:引爆微博舆论爆发的导火索
  10. OMIM使用简要说明