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

能否通过Groovy条件为单Pipeline配置不同参数化Cron值(同分支不同构建)

实现单个Pipeline根据构建场景切换Cron表达式

完全可以实现这个需求,核心思路是通过判断当前构建是否为首次执行,动态生成对应的Cron表达式并设置Pipeline触发器。以下是两种可靠的实现方案:

方案一:通过构建编号判断首次执行

利用Jenkins自带的currentBuild.number变量,首次构建的编号固定为1,后续构建编号会递增。这种方式简单直接,无需额外插件:

// 判断是否为首次构建
def isFirstBuild = currentBuild.number == 1
// 根据判断结果选择Cron表达式
def cronExpr = isFirstBuild ? "0 0 12 * * *" : "0 0 6 * * *"

// 动态设置Pipeline触发器
properties([
    pipelineTriggers([
        cron(cronExpr)
    ])
])

pipeline {
    agent any
    stages {
        stage('执行构建') {
            steps {
                echo "当前构建编号:${currentBuild.number}"
                echo "当前生效的Cron表达式:${cronExpr}"
            }
        }
    }
}

注意:如果Pipeline被删除后重新创建,构建编号会重置为1,此时会再次触发首次构建的Cron规则。如果需要避免这种场景,可以用下面的持久化标记方案。

方案二:用持久化文件标记首次执行完成

通过在Jenkins服务器的持久化目录创建标记文件,后续构建检查该文件是否存在来判断是否为首次执行,这种方式不受构建编号重置的影响:

// 定义标记文件路径,确保Jenkins有读写权限
def markerPath = "/var/jenkins_home/markers/${env.JOB_NAME}_first_build_done"
// 检查标记文件是否存在,不存在则为首次构建
def isFirstBuild = !fileExists(markerPath)

def cronExpr = isFirstBuild ? "0 0 12 * * *" : "0 0 6 * * *"

properties([
    pipelineTriggers([
        cron(cronExpr)
    ])
])

pipeline {
    agent any
    stages {
        stage('标记首次构建') {
            steps {
                script {
                    if (isFirstBuild) {
                        // 创建标记文件
                        writeFile file: markerPath, text: "completed"
                        echo "首次构建完成,已写入标记,后续构建将使用新的Cron规则"
                    }
                }
            }
        }
        stage('执行构建') {
            steps {
                echo "当前生效的Cron表达式:${cronExpr}"
            }
        }
    }
}

关键说明

  • 动态设置properties会在每次构建时更新Pipeline的触发器配置,确保下一次定时执行使用最新的Cron表达式。
  • 使用文件标记时,要确保指定的目录不会被Jenkins的清理机制删除,并且Jenkins进程拥有该目录的读写权限。
  • 如果需要更复杂的条件判断,可以结合currentBuild.getBuildCauses()获取构建触发原因,进一步细化规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:45:41