如何配置Jenkins流水线任务的Cron表达式实现双周周一执行?
Jenkins流水线每两周周一执行的配置方案
Jenkins原生Cron语法没有直接支持“每两周”的字段,因此需要通过变通方式实现,以下是两种可靠的配置方案:
方案一:Cron每周触发 + 流水线内周期判断(推荐)
让流水线每周一固定时间触发,然后在脚本内判断当前是否处于目标周期(奇数/偶数周,或指定起始日期后的每14天),不符合则终止执行,达到每两周运行一次的效果。
1. 配置Cron触发规则
在流水线任务的「构建触发器」中,设置Cron表达式:
H 9 * * 1
H:根据任务哈希值生成随机分钟数,避免集群内任务集中触发;9:指定上午9点执行(可根据需求调整);* * 1:匹配每周一。
2. 添加流水线判断逻辑
在Jenkinsfile开头加入周期校验逻辑,示例如下:
pipeline { agent any stages { stage('校验执行周期') { steps { script { // 方式1:按ISO周数判断(周一为一周起始) def currentWeek = new Date().format('w', TimeZone.getTimeZone('Asia/Shanghai')) as Integer // 选择奇数周执行,如需偶数周则改为 currentWeek % 2 == 0 if (currentWeek % 2 != 1) { echo "本周为非目标周期,跳过执行" currentBuild.result = 'ABORTED' error('终止非周期内的构建') } // 方式2:按指定起始日期计算每14天执行(更精准) // def startDate = Date.parse('yyyy-MM-dd', '2024-05-06') // def currentDate = new Date() // def daysDiff = (currentDate.time - startDate.time) / (1000 * 60 * 60 * 24) as Integer // if (daysDiff % 14 != 0) { // echo "未到每两周执行周期,跳过" // currentBuild.result = 'ABORTED' // error('终止非周期内的构建') // } } } } // 后续构建/部署阶段 stage('构建项目') { steps { echo '开始执行构建流程...' // 替换为你的实际构建逻辑 } } } }
注意:若使用周数判断,需确保Jenkins服务器时区与业务时区一致;若需要严格对齐特定起始日期,推荐使用第二种日期差计算方式。
方案二:双Cron表达式拆分周期(无脚本依赖)
如果不想在流水线内添加判断逻辑,可以通过两个Cron条目结合插件实现周期拆分,但灵活性不如方案一。需提前安装「条件构建步骤」插件,然后:
- 在构建触发器中设置基础Cron:
H 9 * * 1 - 添加条件构建步骤,设置周数判断规则(仅允许奇数/偶数周执行)
内容的提问来源于stack exchange,提问作者Shweta Bahore
相关产品推荐
相关产品推荐

