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

如何配置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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 10:05:15