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

如何在同一Jenkins任务中实现每日夜间发送构建状态邮件

嘿,这个需求完全可以在同一个Jenkins任务里搞定,不用拆分任务,我给你两种可行的方案,根据你的任务类型选就行:

解决方案

方案一:自由风格任务实现

如果你用的是传统的自由风格任务,可以通过插件+参数化定时触发来实现:

1. 配置双定时触发规则

保留你原有的每小时cron(比如0 * * * *),再新增一条夜间的定时规则,比如每天凌晨1点触发:0 1 * * * %SEND_STATUS_EMAIL=true。

这里的%是Jenkins自由风格任务传递参数的分隔符,后面的SEND_STATUS_EMAIL=true是给这次夜间触发的构建标记一个特殊参数。

2. 用条件判断区分任务执行逻辑

先确保安装了Conditional BuildStep插件,然后在任务的「构建」阶段做如下设置:

  • 把你原来的任务执行逻辑(比如shell脚本、maven命令等)放进一个「Conditional BuildStep」里
  • 条件选择「Run condition」→「String match」,设置为:
    • 变量名:SEND_STATUS_EMAIL
    • 匹配模式:^true$
    • 勾选「Run if condition is false」
      这样一来,只有非夜间触发的构建(也就是每小时的定时任务)才会执行原有任务逻辑,夜间触发的构建会直接跳过任务执行,进入邮件环节。

3. 扩展邮件触发规则

打开你已配置的「Editable Email Notification」,进入高级设置的「Triggers」部分:

  • 保留原有的「Failure」触发器,满足你构建失败时发邮件的需求
  • 新增一个「Script - triggered」触发器:
    • 在「Script」框里写Groovy判断:return env.SEND_STATUS_EMAIL == 'true'
    • 自定义邮件主题(比如「每日Jenkins任务状态报告」)和内容,内容里可以引用历史构建的变量,比如:
      每日构建状态更新:
      最后一次任务执行时间:${currentBuild.previousBuild.startTime}
      最后一次构建状态:${currentBuild.previousBuild.result}
      构建详情链接:${currentBuild.previousBuild.absoluteUrl}
      
    • 设置好收件人,就完成了夜间状态邮件的配置。

方案二:Jenkins Pipeline实现(更灵活)

如果你的任务是Pipeline类型,直接在Jenkinsfile里写逻辑会更简洁:

pipeline {
    agent any
    triggers {
        cron('0 * * * *') // 每小时执行任务
        cron('0 1 * * * ? SEND_STATUS_EMAIL=true') // 凌晨1点触发状态邮件
    }
    parameters {
        booleanParam(name: 'SEND_STATUS_EMAIL', defaultValue: false, description: '标记是否发送每日状态邮件')
    }
    stages {
        stage('执行任务逻辑') {
            when {
                not { equals expected: true, actual: params.SEND_STATUS_EMAIL }
            }
            steps {
                // 这里替换成你的原有任务执行代码
                sh './your-build-script.sh'
            }
        }
        stage('发送每日状态邮件') {
            when {
                equals expected: true, actual: params.SEND_STATUS_EMAIL
            }
            steps {
                script {
                    // 获取最后一次有效构建的信息
                    def lastValidBuild = currentBuild.previousBuild
                    def buildStatus = lastValidBuild ? lastValidBuild.result : '无历史构建记录'
                    def buildTime = lastValidBuild ? new Date(lastValidBuild.startTimeInMillis) : 'N/A'
                    def buildLink = lastValidBuild ? lastValidBuild.absoluteUrl : 'N/A'

                    // 发送邮件
                    emailext (
                        subject: "每日任务状态报告 - ${buildStatus}",
                        body: """
                        您好,以下是任务的最新构建状态:
                        任务名称:${env.JOB_NAME}
                        最后一次构建状态:${buildStatus}
                        最后一次构建时间:${buildTime}
                        构建详情链接:${buildLink}
                        """,
                        to: 'your-recipient@example.com'
                    )
                }
            }
        }
    }
    post {
        failure {
            // 原有构建失败触发的邮件
            emailext (
                subject: "任务构建失败提醒 - ${env.JOB_NAME}",
                body: "任务构建失败,详情请查看:${env.BUILD_URL}",
                to: 'your-recipient@example.com'
            )
        }
    }
}

额外注意事项

  • 确保Jenkins已安装Email Extension Plugin(就是你用的Editable Email Notification对应的插件),自由风格任务还需要Conditional BuildStep Plugin
  • 测试时可以手动触发任务并勾选SEND_STATUS_EMAIL参数,验证是否能正确发送状态邮件且不执行任务逻辑
  • 如果夜间构建是任务的第一次执行(无历史构建),建议在邮件逻辑里加判断,避免报错

内容的提问来源于stack exchange,提问作者Suresh Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:05:35