如何配置Jenkins cron定时任务每日构建最新Tag
Jenkins 每日3点构建最新Tag配置方案
你此前触发所有Tag构建的核心原因是:Jenkins多分支流水线会为每一个匹配到、且包含cron配置的Tag生成独立的定时任务,因此所有符合规则的Tag都会被触发。要实现仅构建最新Tag,不要将定时规则写在随代码打包的Jenkinsfile中,改用独立定时任务+Tag校验的方案即可,具体操作如下:
1. 创建独立的定时触发任务
单独创建一个流水线/自由风格类型的触发任务,不要和原有业务构建的多分支流水线共用Jenkinsfile:
- 进入任务配置页,找到「构建触发器」模块,勾选「定时构建」
- cron规则填写
0 3 * * *,即可实现每日凌晨3点自动触发 - 该任务不需要配置代码拉取以外的业务构建逻辑,仅做Tag校验和触发原有构建任务用
2. 编写获取最新Tag并触发构建的逻辑
如果是自由风格任务,在构建步骤中添加「执行Shell」,填入以下代码(Git仓库场景):
# 拉取远程仓库所有最新Tag信息 git fetch origin --tags # 获取最新的语义化版本Tag,可根据自身Tag命名规则调整排序、过滤逻辑 LATEST_TAG=$(git tag -l | sort -V | tail -n 1) echo "待构建的最新Tag为: $LATEST_TAG" # 触发原有多分支流水线对应Tag的构建任务,替换为你自己的Jenkins地址、用户名、API Token、多分支任务名 curl -X POST "http://<你的Jenkins服务地址>/job/<你的业务多分支流水线名称>/job/${LATEST_TAG}/build" \ --user <Jenkins用户名>:<对应用户的API Token>
如果是流水线类型的触发任务,使用以下Jenkinsfile:
pipeline { agent any triggers { // 每日3点触发 cron('0 3 * * *') } stages { stage('拉取最新Tag信息') { steps { sh 'git fetch origin --tags' } } stage('触发最新Tag构建') { steps { script { // 获取最新Tag,可根据需求调整过滤、排序规则 def latestTag = sh( script: 'git tag -l | sort -V | tail -n 1', returnStdout: true ).trim() echo "本次构建的Tag为:${latestTag}" // 触发对应Tag的业务构建任务,替换为你自己的多分支流水线任务路径 build job: "../<你的业务多分支流水线名称>/${latestTag}", wait: false } } } } }
3. 可选:自定义Tag过滤规则
如果你的仓库存在测试Tag、非正式版本Tag需要过滤,可以修改获取Tag的命令,比如只匹配v开头、不带beta/rc标识的正式版本Tag:
LATEST_TAG=$(git tag -l "v*" | grep -vE "beta|rc|test" | sort -V | tail -n 1)
4. 清理原有配置
删除之前写在业务多分支流水线Jenkinsfile中的cron定时配置,避免再次出现多个Tag同时被触发的问题。
内容的提问来源于stack exchange,提问作者kingpinzs
相关产品推荐
相关产品推荐

