You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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点的剩余时长,自动设置构建超时时间,到点就终止运行。

  1. 先在Jenkins的「插件管理」里安装Build Timeout Plugin
  2. 然后修改你的主构建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点触发,专门用来终止主构建任务的运行实例:

  1. 新建一个Pipeline任务(比如叫「StopDailyBuild」)
  2. 设置定时触发器为0 17 * * *(每天17点触发)
  3. 在脚本里编写终止主任务的逻辑(需要确保该任务有足够的权限):
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 12:13:11