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

求每月首个周五过后首个周日运行的Jenkins Cron自动化配置

实现Jenkins测试任务自动触发的方案

完全可以实现自动化,无需每月手动更新日期配置。由于纯Cron表达式无法直接描述「每月首个周五过后的首个周日」这种相对日期逻辑,推荐采用Jenkins Pipeline脚本+Cron定时触发的组合方案,具体实现如下:

1. 基础Cron触发配置

先给Jenkins任务设置一个覆盖所有周日的Cron表达式,比如固定每周日上午9点触发任务(时间可根据需求调整):

0 9 * * 0

这个表达式会让任务每周日9点尝试启动,但我们会通过脚本判断当日是否为目标周日,只有符合条件才执行测试逻辑。

2. Pipeline脚本中的日期判断逻辑

在Jenkinsfile中添加Groovy脚本,计算当月首个周五的日期,再验证当前运行的周日是否是该周五之后的第一个周日:

pipeline {
    agent any
    triggers {
        cron('0 9 * * 0') // 每周日9点触发任务
    }
    stages {
        stage('校验目标日期') {
            steps {
                script {
                    def today = new Date()
                    def cal = Calendar.getInstance()
                    cal.setTime(today)
                    
                    // 双重校验:确保当日是周日
                    if (cal.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY) {
                        echo "今日非周日,终止任务"
                        currentBuild.result = 'ABORTED'
                        return
                    }
                    
                    // 计算当月首个周五的日期
                    def firstDayOfMonth = new Date(today.getYear(), today.getMonth(), 1)
                    def firstFriCal = Calendar.getInstance()
                    firstFriCal.setTime(firstDayOfMonth)
                    while (firstFriCal.get(Calendar.DAY_OF_WEEK) != Calendar.FRIDAY) {
                        firstFriCal.add(Calendar.DATE, 1)
                    }
                    def firstFri = firstFriCal.getTime()
                    
                    // 计算首个周五之后的首个周日(周五+2天)
                    def targetSunCal = Calendar.getInstance()
                    targetSunCal.setTime(firstFri)
                    targetSunCal.add(Calendar.DATE, 2)
                    def targetSun = targetSunCal.getTime()
                    
                    // 判断当日是否为目标周日
                    if (today.format('yyyy-MM-dd') == targetSun.format('yyyy-MM-dd')) {
                        echo "今日是首个周五后的目标周日,开始执行测试"
                    } else {
                        echo "今日非目标周日,终止任务"
                        currentBuild.result = 'ABORTED'
                        return
                    }
                }
            }
        }
        stage('执行测试用例') {
            steps {
                // 此处编写你的测试执行逻辑,例如调用测试脚本、运行自动化套件等
                echo "启动补丁测试用例..."
                // sh './run-patch-tests.sh'
            }
        }
    }
}

3. 额外优化方向

  • 可将日期判断逻辑封装为Jenkins共享库,方便多个任务复用。
  • 如果需要更精准的触发时机(比如补丁部署完成后立即触发,而非固定周日),可结合Jenkins的下游构建触发器:让月度首周五的补丁部署任务成功后,主动触发测试任务,同时在部署任务中添加标记(如环境变量),测试任务仅在收到该标记时执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:20:29