首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Jenkins触发构建--时间触发

Jenkins触发构建--时间触发

原创
作者头像
陈不成i
修改2021-06-02 17:50:57
修改2021-06-02 17:50:57
3K0
举报
文章被收录于专栏:ops技术分享ops技术分享

时间触发

时间触发是指定义一个时间,时间到了就触发pipeline执行。在pipeline中,使用trigger指令来定义时间触发,只能定义在pipeline块下。支持cron pollSCM upstream三种方式。其它方式可以通过插件来实现。

定时触发

定时执行就像cronjob,一到时间点就执行。它的使用场景通常是执行一些周期性的job,比如每晚构建。

  1. pipeline {
  2.     agent any
  3.     triggers {
  4.         cron('0 0 * * *')
  5. }
  6.     stages {
  7.         stage('Nightly build') {
  8.             steps {
  9.                 echo "这是一个耗时的构建,每天凌晨执行"
  10. }
  11. }
  12. }
  13. }

enkins tigger cron语法采用UNIX cron语法(有细微差别)。一条cron包含5个字段,使用空格或者Tab分隔,格式为:分,时,日,月,周

  • MINUTE:一小时内的分钟,取值范围为0~59
  • HOUR:一天内的小时,0~23
  • DOM:一个月的某几天,1~31
  • MONTH:月份,取值1~12
  • DOW:星期几,取值0~7 0和7代表周日

还可以使用以下特殊字符,一次性指定多个值

  • *匹配所有
  • M-N,匹配M到N之间的值
  • M-N/X or */x  指定到N范围内,以X值为步长
  • A,B,…,Z 使用逗号枚举多值

在一些大型组织中,会同时存在大量的同一时刻执行的定时任务,比如N个半夜零点 0 0 * * * 执行的任务。这样会产生负载不均衡。在Jenkins tigger cron语法中使用H字符来解决这一问题,H代表hash。对于没必要精确到零点0分执行的任务,cron可以这样写: H 0 * * *,代表零点0分支59分之前任何一个时间点执行。

需要注意的是,H应用在DOM,一个月的某一天字段时会有不准确的情况,因为10月有31天,而2月却是28天。

Jenkins trigger cron还设计了一些人性化的别名:@yearly、@annually、@monthly、@weekly、@daily、@midnight和@hourly。

例如@hourly与 H * * * *相同,代表一小时内的任何时间;@midnight实际上代表在半夜12:00到凌晨2:59之前的某个时间。其它别名很少有应用场景。

轮询代码仓库

轮询代码仓库是指定期到代码仓库询问代码是否有变化,如果有变化就执行。有读者会问:那多久轮询一次?笔者的回答是:越频繁越好。

因为构建的间隔时间越长,在一次构建内就可能会包含多次代码提交。当构建失败时,你无法马上知道那一次代码提交导致了构建失败。总之,越不频繁集成,得到的持续集成的好就越少。 triggers {     pollSCM(‘H/1 * * * *’) }

这种一般用于特殊情况,比如外网的代码仓库无法调用内网的jenkins。则需要用这种方式。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 时间触发
    • 定时触发
    • 轮询代码仓库
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档