Jenkins触发构建--时间触发

2021-06-02 17:50:57 浏览数 (1)

时间触发

时间触发是指定义一个时间,时间到了就触发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。则需要用这种方式。

0 人点赞