[Jenkins]如何自动停止超时任务?
2014-03-18 11:59
453 查看
公司的Jenkins服务器运行一段时间了,每天编译github cocos2d-x仓库的所有pull request,还算稳定。但有个问题比较郁闷,由于实际执行编译的slave就放在办公室里,网络不太稳定,特别是访问github时,有时会导致整个编译任务挂起。由于我们在每个slave上只放了一个执行单元(Excutor),只要一个编译任务挂起,就会导致整个jenkins挂起,所有后续的编译任务都在排队。这个时候只能手动杀掉挂起的任务,以便其他排队的任务可以继续执行。这个问题很蛋疼,因为我们不可能派个人一直盯着jenkins主站,等发现有任务挂起时,已经有10几个pull
request在排队了。
被这个问题折磨了几次之后,我下定决心要把它解决掉,分析了一下,其实可以用jenkins自己来解决:构建一个监控任务(jenkins-job-watchdog),每几分钟跑一次,看看其他任务有没有超时,如果超时,就把它关掉,呵呵,思路并不复杂。熟悉jenkins的童鞋可能会注意到:如果jenkins已经被挂起,就没有办法执行watchdog任务,怎么可能杀掉挂起的任务呢?呵呵,诀窍在于部署:在阿里云上部署一台jenkins master,在公司本地网络部署多台jenkins
slave,master上不执行实际的编译任务,只执行触发器任务:响应任务请求,触发实际编译任务(在slave上执行),然后马上结束。这样,就保证了master不会被挂起,只要在master上执行watch-dog任务就可以了。那么:如何获取当前运行的任务,要怎么结束任务呢?必须介绍一下强大的jenkins python api, github地址:
https://github.com/salimfadhley/jenkinsapi
用法很简单:
J = Jenkins('http://localhost:8080',username,password)
for key,job in J.iteritems():
last_build = job.get_last_buildnumber()//获得最后一个构建的编号
running = build.is_running()//任务是否在运行
start_time = last_build.get_timestamp()//获得构建的开始时间
last_build.stop()//停止构建
将watchdog部署上去以后,还可以分别指定每个任务的超时时间,一旦超时就会被自动杀掉,再也不用半夜起床检查jenkins了~~
request在排队了。
被这个问题折磨了几次之后,我下定决心要把它解决掉,分析了一下,其实可以用jenkins自己来解决:构建一个监控任务(jenkins-job-watchdog),每几分钟跑一次,看看其他任务有没有超时,如果超时,就把它关掉,呵呵,思路并不复杂。熟悉jenkins的童鞋可能会注意到:如果jenkins已经被挂起,就没有办法执行watchdog任务,怎么可能杀掉挂起的任务呢?呵呵,诀窍在于部署:在阿里云上部署一台jenkins master,在公司本地网络部署多台jenkins
slave,master上不执行实际的编译任务,只执行触发器任务:响应任务请求,触发实际编译任务(在slave上执行),然后马上结束。这样,就保证了master不会被挂起,只要在master上执行watch-dog任务就可以了。那么:如何获取当前运行的任务,要怎么结束任务呢?必须介绍一下强大的jenkins python api, github地址:
https://github.com/salimfadhley/jenkinsapi
用法很简单:
J = Jenkins('http://localhost:8080',username,password)
for key,job in J.iteritems():
last_build = job.get_last_buildnumber()//获得最后一个构建的编号
running = build.is_running()//任务是否在运行
start_time = last_build.get_timestamp()//获得构建的开始时间
last_build.stop()//停止构建
将watchdog部署上去以后,还可以分别指定每个任务的超时时间,一旦超时就会被自动杀掉,再也不用半夜起床检查jenkins了~~
相关文章推荐
- 【FAQ】如何在新打git tag入库后自动触发Jenkins任务?
- jenkins设置任务超时 超过限定时间停止任务
- jenkins 构建脚本时javac编译出错自动停止任务
- 在CI (Jenkins) 从机(服务器)上使用bat批处理执行自动构建任务时,输出NuGet还原失败的解决方案
- php如何实现定时任务 php定时任务方法 最佳解决方案 php自动任务处理
- SQL Server 2008如何创建定期自动备份任务
- [架构师之路]10w定时任务,如何高效触发超时 2017-03-09
- Jira+Jenkins集成,实现任务状态改变自动触发发布
- 定时IIS任务自动停止及解决办法
- SQL Server 2008如何创建定期自动备份任务
- 如何避免SSH Secure Shell Client连接Linux超时,自动断开?
- Jenkins编译任务如何下载多个git库代码到同一本地仓库
- 读10w定时任务,如何高效触发超时 文章有感 源码
- 通过Shell+atd定时任务,实现jenkins指定时间自动发布任务
- android 设置录制视频的时长与大小限制,超时、超大小时自动停止
- 10w定时任务,如何高效触发超时
- 如何通过自动完成点击页面的任务
- 使用Future停止超时任务
- 如何避免Docker容器启动脚本运行后自动退出——一个cron定时任务docker镜像方案
- 牛刀小试:使用Reactive Extensions(Rx),一行代码实现多线程任务执行规定时间后自动停止