Jenkins Pipeline实现每日9:00启动、17:00停止构建的插件咨询
Jenkins实现每日定时启停构建的方案
当然有办法实现这个需求啦!Jenkins本身自带的功能加上一些常用插件就能搞定每日9点自动启动、17点自动停止构建的需求,我给你拆解成两个核心部分来说明:
一、每日9:00自动启动构建(无需额外插件)
Jenkins自带的定时触发器(Cron表达式)就能轻松实现这个功能,完全不需要额外装插件。你只需要在Pipeline脚本里加入定时触发配置即可:
pipeline { agent any triggers { cron('0 9 * * *') // 这个Cron表达式表示每天上午9:00准点触发构建 } stages { stage('你的构建阶段') { steps { // 这里写你实际的构建命令,比如编译、打包、部署等 echo '开始执行每日构建任务...' } } } }
Cron表达式的规则是分 时 日 月 周,0 9 * * *就对应每天第9小时的第0分钟触发。
二、每日17:00自动停止构建(需要插件支持)
如果你的构建任务可能运行超过8小时,需要在17点强制停止,这里有两个实用方案可选:
方案1:用Build Timeout Plugin动态设置超时
这个插件可以让你根据当前时间计算到17点的剩余时长,自动设置构建超时时间,到点就终止运行。
- 先在Jenkins的「插件管理」里安装Build Timeout Plugin
- 然后修改你的主构建Pipeline脚本,加入动态计算超时的逻辑:
pipeline { agent any triggers { cron('0 9 * * *') } options { // 调用自定义方法计算到17点的剩余分钟数,设置超时 timeout(time: calculateStopTimeout(), unit: 'MINUTES') } stages { stage('长时间运行的构建任务') { steps { echo '构建中,将在17:00自动停止...' // 你的构建步骤,比如耗时的测试、编译等 } } } } // 自定义方法:计算当前时间到当天17:00的剩余分钟数 def calculateStopTimeout() { def currentTime = new Date() def stopTime = new Date(currentTime.year, currentTime.month, currentTime.date, 17, 0, 0) // 如果当前时间已经过了17点,直接返回0(不设置超时) if (currentTime.after(stopTime)) { return 0 } // 转换为分钟数返回 return (stopTime.time - currentTime.time) / (1000 * 60) }
方案2:用独立定时任务终止构建
如果你希望更灵活地控制停止逻辑,可以单独创建一个Pipeline任务,每天17点触发,专门用来终止主构建任务的运行实例:
- 新建一个Pipeline任务(比如叫「StopDailyBuild」)
- 设置定时触发器为
0 17 * * *(每天17点触发) - 在脚本里编写终止主任务的逻辑(需要确保该任务有足够的权限):
pipeline { agent any triggers { cron('0 17 * * *') // 每天17:00触发停止操作 } stages { stage('终止主构建任务') { steps { script { // 替换成你的主构建任务的全名 def mainBuildJob = Jenkins.instance.getItemByFullName('你的主构建任务名称') // 遍历主任务的所有运行实例,终止正在执行的构建 mainBuildJob.getBuilds().each { runningBuild -> if (runningBuild.isBuilding()) { runningBuild.doStop() echo "已终止正在运行的构建:#${runningBuild.number}" } } } } } } }
注意:如果使用Jenkins API的方式,需要在Jenkins全局安全配置中,暂时放宽脚本安全限制(或者通过插件提供的安全方法实现,避免权限问题)。
内容的提问来源于stack exchange,提问作者varad_automation
相关产品推荐
相关产品推荐

