Skip to main content
Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Jenkins Multibranch Pipeline 定时触发

Multibranch Pipeline 和普通 Pipeline 最大的区别是 – 定时构建不能直接在 Jenkinsfile 用 cron 触发全部分支!

必须区分 两种层面的定时任务:

🔥 你要决定的是

你需要的是:

① 定期扫描仓库(找到新增/删除/变化分支)?

-> 配置 Scan Multibranch Pipeline Triggers

② 定期执行每个分支的 Pipeline?

-> 配置 在 Jenkinsfile 中设置 cron(每个分支独立定时)

③ 不管有没有变化,都定时构建所有分支?

-> 需要开启 Periodically if not otherwise run

下面逐条配置

✅ 一、Multibranch Pipeline:定时扫描 GitHub 仓库

这不是构建 Pipeline,而是扫描 Repo。

路径:

Jenkins -> 你的 Multibranch Pipeline Job -> Configure

找到:

Scan Multibranch Pipeline Triggers

勾选:

Periodically if not otherwise run

填写 cron,如:

H/5 * * * *

意思是:每 5 分钟扫描仓库

📌 作用:

  • 仓库新增 branch -> 自动创建新 Job
  • 仓库删除 branch -> 自动删除对应分支的 Job
  • 分支的 Jenkinsfile 修改 -> 自动更新 Pipeline 定义

注意:这个只控制扫描,不构建分支!

✅ 二、每个分支自己的定时构建(推荐)

在 每个分支的 Jenkinsfile 里添加:

pipeline {
    agent any

    triggers {
        cron('H 2 * * *')
    }

    stages {
        stage('Run') {
            steps {
                echo "定时执行: ${env.BRANCH_NAME}"
            }
        }
    }
}

效果:

  • main 分支每天凌晨 2 点自动执行
  • dev 分支每天凌晨 2 点自动执行
  • hotfix 分支每天凌晨 2 点自动执行
    • (只要该分支带有 Jenkinsfile)

要构建 tag 也可以用:

when {
    buildingTag()
}

📌 常见误区(很重要⚠️)

❌ 在 Multibranch Pipeline 配置里面找不到“定时构建”

因为 Multibranch Pipeline 的根 Job 不会构建代码,只负责扫描分支,所有构建都发生在分支级 Job。

❌ 在 Jenkinsfile 里无法触发全局所有分支的定时运行

正确方式就是:每个分支写自己的 triggers { cron }。

🔥 三、定时构建所有分支(无论是否有变化)

如果你希望:

  • main 每晚 2 点执行
  • dev 每晚 2 点执行
  • feature/** 一律每晚 2 点执行(建议排除)

那么必须在 Jenkinsfile 里加入 cron,并且在 Multibranch Pipeline 配置启用自动扫描。

组合方式:

1. Jenkinsfile

pipeline {
    agent any

    triggers {
        cron('H 2 * * *')
    }

    stages {
        stage('Nightly Build') {
            steps {
                echo "夜间构建:${env.BRANCH_NAME}"
            }
        }
    }
}

2. Multibranch Pipeline 中

Scan Multibranch Pipeline Triggers -> 每小时扫描一次

这样:

  • Jenkins 定期构建所有存在 Jenkinsfile 的分支
  • Jenkins 会自动发现新增分支并加入定时任务

🔥 四、只让 main 分支定时执行(最常用)

在 main 分支 Jenkinsfile:

pipeline {
    triggers {
        cron('H 2 * * *')
    }

    stages {
        stage('Nightly') {
            steps {
                echo "main 分支定时构建"
            }
        }
    }
}

在 dev、feature 等分支删掉 triggers {} 即可。

✨ 五、组合规则(生产中常用模式)

下面 3 种模式最常用:

① 模式 1:只扫描,不定时构建

Scan: H/5 * * * *
Jenkinsfile: 不写 cron

适用于 PR、CI

② 模式 2:main 定时构建 + 全部分支自动扫描

Scan: 每 10 分钟
main Jenkinsfile: 写 cron
其他分支: 不写 cron

适用于 nightly build

③ 模式 3:所有分支 nightly 构建

Scan: 每小时
所有 Jenkinsfile: 写 cron,总是 nightly build

适合 release/ 多环境部署