如何配置Jenkins每15天在周一执行定时构建?
解决Jenkins每15天在周一执行构建的问题
你使用的30 6 */15 * 1表达式存在逻辑问题:它要求日期为15的倍数(如1日、16日)且当天是周一才会触发构建,这种重合场景极少发生,因此无法满足需求。以下是两种可行的解决方案:
方案一:近似每15天(每月第1、3个周一)
如果你的需求可以放宽为每月第1个和第3个周一执行构建(间隔约15天),可以使用以下cron表达式:
30 6 * * 1#1,1#3
1#1表示每月第1个周一,1#3表示每月第3个周一,两者结合可实现近似15天的间隔周期。
方案二:严格每隔15天且仅在周一执行
由于15天周期与7天周周期无最小公倍数,单一cron表达式无法直接实现严格的15天间隔+周一执行的逻辑,需结合条件判断:
步骤1:设置周一定时触发
在Jenkins任务的「Build Periodically」中配置基础触发规则,确保每周一指定时间触发:
30 6 * * 1
步骤2:添加间隔校验逻辑
通过构建前置步骤判断距离上次成功构建是否已超过15天,未满足则终止本次构建。
方式A:Shell脚本校验
添加「Execute shell」步骤,执行以下脚本(替换<jenkins-url>和<job-name>为实际值):
# 获取上次成功构建的时间戳(毫秒转秒) LAST_BUILD=$(curl -s "http://<jenkins-url>/job/<job-name>/lastSuccessfulBuild/buildTimestamp" | grep -oE '[0-9]+') # 当前时间戳 CURRENT_TIME=$(date +%s) # 计算间隔天数 DIFF_DAYS=$(( (CURRENT_TIME - LAST_BUILD) / 86400 )) if [ $DIFF_DAYS -lt 15 ]; then echo "距离上次成功构建仅${DIFF_DAYS}天,未达到15天间隔要求,终止构建" exit 1 fi
方式B:Pipeline脚本校验(推荐)
如果使用Jenkins Pipeline,可直接在脚本中添加间隔校验逻辑:
pipeline { agent any triggers { cron('30 6 * * 1') } stages { stage('校验构建间隔') { steps { script { def lastSuccessfulBuild = currentBuild.previousSuccessfulBuild if (lastSuccessfulBuild) { def daysElapsed = (new Date().time - lastSuccessfulBuild.timeInMillis) / (1000 * 60 * 60 * 24) if (daysElapsed < 15) { error("距离上次成功构建仅${daysElapsed.intValue()}天,不满足15天间隔要求,终止构建") } } } } } stage('执行构建') { steps { echo "开始执行构建任务..." // 此处添加你的具体构建命令 } } } }
内容的提问来源于stack exchange,提问作者wineth
相关产品推荐
相关产品推荐

