Jenkins cron定时构建触发器

from: https://www.jenkins.io/doc/book/pipeline/syntax/#cron-syntax
以下内容为根据Jenkins官方文档cron表达式部分翻译过来,使用机翻加个人理解补充内容,包括举例。

目录

  • 介绍
  • 举例:
  • 设置方法
    • 方法一:
    • 方法二:
  • 其他举例
    • @yearly
    • @annually
    • @weekly
    • @daily
    • @midnight
    • @hourly
  • 一些问题:
    • jenkins中定时构建 在一个pipeline中可以同时设置daily 和weekly吗?可以每个定时器触发不同的stage,且可以daily只触发daily的stage吗?
    • triggers里能写两个cron表达式吗?
    • 一个pipeline能写两个triggers吗?
    • config中Build periodically定义cron和pipeline里triggers里的cron表达式都写,哪个会生效?
  • 拓展阅读:

介绍

Jenkins cron 语法遵循 cron 实用程序的语法(有细微差别)。具体来说,每行由 5 个由 TAB 或空格分隔的字段组成:
在这里插入图片描述

分钟 小时 日 月 一周中的第几日
要为一个字段指定多个值,可以使用以下运算符。按照优先顺序,
*指定所有有效值
M-N 指定一个值范围
M-N/X*/XX 为间隔步进通过指定范围或整个有效范围
A,B,...,Z 枚举多个值
H 表示有效值范围内任意一个时间点

为了允许定期调度的任务在系统上产生均匀的负载,应尽可能使用符号 H(“哈希”)。例如,对十几个日常Job使用 0 0 * * * 将导致午夜出现大幅峰值。相比之下,使用 H H * * * 仍会每天执行每个Job一次,但不是同时执行所有Job,更好地利用有限的资源。
H 符号可以与范围一起使用。例如,H H(0-7) * * * 表示 12:00 AM(午夜)到 7:59 AM 之间的某个时间。您还可以将步长间隔与H一起使用,带或不带范围。
H 符号可以被认为是一定范围内的随机值,但它实际上是Job名称的哈希值,而不是随机函数,因此该值对于任何给定项目都保持稳定。
请注意,对于月份字段,由于月份长度可变,*/3 H/3 等短周期在大多数月末附近不会一致工作。例如,*/3 将在长月的第 1 天、第 4 天、…第 31 天运行,然后在下个月的第二天运行。哈希值始终选择在 1-28 范围内,因此 H/3 将在月底的运行之间产生 3 到 6 天的间隙。较长的周期也会有不一致的长度,但效果可能相对不太明显。

空行和以 # 开头的行将作为注释被忽略。 此外,还支持@yearly@annually@monthly@weekly@daily@midnight @hourly 作为方便的别名。它们使用哈希系统进行自动平衡。例如,@hourlyH * * * * 相同,可以表示一小时内的任何时间。 @midnight 实际上是指 12:00 AM 到 2:59 AM 之间的某个时间。

举例:

每十五分钟一次 (perhaps at :07, :22, :37, :52)
triggers{ cron('H/15 * * * *') }
每半个小时,隔十分钟一次 (three times, perhaps at :04, :14, :24)
triggers{ cron('H(0-29)/10 * * * *') }
周一到周五从上午九点到下午四点,每隔两个小时,在45分钟的时候运行一次,即每个工作日从上午 9:45 开始到下午 3:45 结束,每两小时一次。
triggers{ cron('45 9-16/2 * * 1-5') }
每个工作日上午 9 点到下午 5 点之间每两小时一次(可能是上午 10:38、中午 12:38、下午 2:38、下午 4:38)
triggers{ cron('H H(9-16)/2 * * 1-5') }
除12月外,每月1日和15日每天一次
triggers{ cron('H H 1,15 1-11 *') }

设置方法

方法一:

在Jenkins中,可以在config界面配置:
注: 第一位必须要是 H
比如 H H * * 1'表示 每周一任意时间执行一次
在这里插入图片描述
填写完Schedule 可查看下方的提示确认触发时间。(可用这种方式进行调试)

方法二:

cron表达式写到pipeline中(推荐)

pipeline {agent anytriggers {cron('0 12 * * 1') // 每周一的12点触发任务}stages {stage('Build') {steps {// 构建任务的步骤}}}
}

其他举例

# Would last have run at Monday, March 11, 2024 11:36:08 AM CST; would next run at Monday, March 11, 2024 11:38:08 AM CST.
# 周一,每两分钟执行一次
H/2 * * * 1# Would last have run at Monday, March 11, 2024 10:47:25 AM CST; would next run at Monday, March 11, 2024 12:47:25 PM CST.
# 周一,每两小时执行一次
H */2 * * 1  或者 H H/2 * * 1# 每天的晚上11点运行
pipline {triggers {cron('H 23 * * *')}
}# 每天的凌晨00:01分运行,第一位数值不能设置为*
pipline {triggers {cron('01 00 * * *') #此配置表示凌晨00:01自动触发}
}

@yearly

在这里插入图片描述

@annually

在这里插入图片描述

@weekly

在这里插入图片描述

@daily

在这里插入图片描述

@midnight

在这里插入图片描述

@hourly

在这里插入图片描述

一些问题:

jenkins中定时构建 在一个pipeline中可以同时设置daily 和weekly吗?可以每个定时器触发不同的stage,且可以daily只触发daily的stage吗?

好像不行,试过很多种方法,暂时没有实现。如果有什么好的方法,欢迎留言一起讨论。
目前实现daily,weekly,方法是拆分成两个pipeline,一个cron表达式控制一个job。

triggers里能写两个cron表达式吗?

不行,会报错

pipeline {agent anytriggers {cron('19 13 * * *') cron('20 13 * * *')}stages {stage('Build') {steps {echo "aa"}}}
}

报错截图:
在这里插入图片描述

一个pipeline能写两个triggers吗?

不能,会报错

pipeline {agent anytriggers {cron('23 13 * * *')}triggers {cron('22 13 * * *')}stages {stage('Build') {steps {echo "aa"}}}
}

报错截图:
在这里插入图片描述

config中Build periodically定义cron和pipeline里triggers里的cron表达式都写,哪个会生效?

在Jenkins中,如果config中的Build periodically定义了cron表达式,同时在pipeline脚本中的triggers部分也定义了cron表达式,那么以pipeline脚本中定义的cron表达式为准,即pipeline中定义的cron表达式会生效。因此,当pipeline中定义了cron触发器时,会忽略config中的Build periodically定义的cron表达式。

拓展阅读:

详细cron表达式的用法可以参考:
https://tool.lu/crontab
https://blog.csdn.net/u011441473/article/details/80902472

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/540459.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UG NX二次开发(C#)-单选对话框UF_UI_select_with_single_dialog的使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、UF_UI_select_with_single_dialog函数3、实现代码3.1 利用委托创建一个方法3.2 直接调用1、前言 对于单选对话框,采用C++/C写的时候比较容易,也在帮助文档中有示例,但是对于C#开发采…

C# StartsWith 字符串的实例方法

在 C# 中,StartsWith 是一个字符串的实例方法,用于检查字符串是否以指定的前缀开头。它返回一个布尔值,指示字符串是否以指定的前缀开始。 以下是 StartsWith 方法的详细解释和示例说明: public bool StartsWith(string value);…

EtherCAT运动控制器在ROS上的应用(下)

本篇文章我们主要介绍正运动技术动态链接库环境配置以及EtherCAT运动控制器在ROS下的单轴运动。 在正式学习之前,我们先了解一下正运动技术的EtherCAT运动控制器ZMC432和ZMC408CE。这两款产品分别是32轴,8轴EtherCAT运动控制器。 ZMC432功能简介 ZMC4…

List(CS61B学习记录)

问题引入 上图中,赋给b海象的weight会改变a海象的weight,但x的赋值又不会改变y的赋值 Bits 要解释上图的问题,我们应该从Java的底层入手 相同的二进制编码,却因为数据类型不同,输出不同的值 变量的声明 基本类型…

tcp/ip协议2实现的插图,数据结构8 (30 - 32章)

(201) 201 三十0 中断优先级补充 (202) 202 三十1 TCP的用户需求 函tcp_usrreq一 (203) 203 三十2 TCP的用户需求 函tcp_usrreq二 (204) 204 三十3 TCP的用户需求 函tcp_usrreq三 (205) 205 三十4 TCP的用户需求 函tcp_usrreq四 (206) 206 三十5 TCP的用户需求 函tcp_usrreq五 …

国创证券策略:股指预计维持震荡格局 关注汽车、通信设备等板块

国创证券指出,近期两市指数持续反弹创新高,但沪指现已率先出现滞涨状况,一起均已进入阻力重压区。不过当时技术形状上坚持较好,可持续做多,一旦跌破重要支撑如沪指的3030点,则需降仓防卫,防止指…

拦截器和过滤器(原理区别)

目录 一、拦截器 拦截器是什么 拦截器的使用 拦截器的实现 导入依赖 实现HandlerInterceptor接口 注册拦截器 拦截器的生命周期 拦截器的执行顺序 拦截器的生命周期 多个拦截器的执行流程 拦截器的实际使用 拦截器实现日志记录 实现接口幂等性校验 拦截器的性能…

Gitee配置SSH登录

一、背景 新入手的电脑,需要对Gitee上存放的项目进行更改上传,发现上传不了需要登录,便采用SSH密钥进行登录,防止远程管理工程中的信息泄露 二、前提 电脑已下载Git Bash工具,在项目下点击鼠标右键,进入…

案例分析篇15:软件开发方法考点(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例分析篇-…

Hadoop大数据应用:Linux 部署 HDFS 分布式集群

目录 一、实验 1.环境 2.Linux 部署 HDFS 分布式集群 3.Linux 使用 HDFS 文件系统 二、问题 1.ssh-copy-id 报错 2. 如何禁用ssh key 检测 3.HDFS有哪些配置文件 4.hadoop查看版本报错 5.启动集群报错 6.hadoop 的启动和停止命令 7.上传文件报错 8.HDFS 使用命令 一…

基于java+springboot+vue实现的旅游管理系统(文末源码+Lw+ppt)23-402

摘 要 甘肃旅游管理系统采用B/S架构,数据库是MySQL。网站的搭建与开发采用了先进的java进行编写,使用了SpringBoot框架。该系统从两个对象:由管理员和用户来对系统进行设计构建。主要功能包括:个人信息修改,对用户、…

微信小程序+java如何实现图片白色背景改透明

目录 1. 如何实现? 1.1 java端代码: 1.2 微信小程序端 1.2.1 前置要求 1.2.2 文件选择 1.2.3 文件上传 1.2.4 数据双向绑定 先看效果【 扫码可体验具体功能 】: 原图: 处理后: 1. 如何实现? 1.1…