[Jenkins]如何自动停止超时任务?

2024-08-23 17:18

本文主要是介绍[Jenkins]如何自动停止超时任务?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       公司的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了~~

这篇关于[Jenkins]如何自动停止超时任务?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1100006

相关文章

Jenkins分布式集群配置方式

《Jenkins分布式集群配置方式》:本文主要介绍Jenkins分布式集群配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装jenkins2.配置集群总结Jenkins是一个开源项目,它提供了一个容易使用的持续集成系统,并且提供了大量的plugin满

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

Python设置Cookie永不超时的详细指南

《Python设置Cookie永不超时的详细指南》Cookie是一种存储在用户浏览器中的小型数据片段,用于记录用户的登录状态、偏好设置等信息,下面小编就来和大家详细讲讲Python如何设置Cookie... 目录一、Cookie的作用与重要性二、Cookie过期的原因三、实现Cookie永不超时的方法(一)

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis