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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:06:10