Jenkins pipeline多触发器配置下cron触发时间与预期不符问题
问题根因
- Jenkins的
cron触发器默认使用Jenkins主实例的JVM/系统时区计算触发时间,不会自动匹配你预期的美东时区,你写在表达式里的18点,是Jenkins实例当前配置时区下的18点,不是美东时间的18点。 - 从触发时间差判断,你的Jenkins实例当前默认使用UTC时区:美东每年3-11月执行夏令时(EDT,UTC-4),当UTC时间到达18点时,对应的美东夏令时时间刚好是18-4=14点,和你观测到的实际触发时间完全吻合。你可以进入
Manage Jenkins->System Information页面,查看user.timezone参数值确认,该值当前应为UTC。 pollSCM触发器配置为每5分钟轮询一次,轮询间隔短,4小时的时区偏移不会影响其运行感知,因此表现为运行正常。
修复方案
你可以根据需求选择以下任意一种方案调整:
- 全局时区修改:进入
Manage Jenkins->System配置页,找到System Timezone配置项,设置为America/New_York(该时区标识会自动适配美东冬/夏令时切换,比固定选EST/EDT更稳妥),保存后重启Jenkins即可全局生效。 - 流水线内单独指定时区(推荐,无需修改全局配置):Jenkins 2.300及以上版本支持在cron表达式内直接指定时区,修改triggers配置如下即可:
triggers { pollSCM('H/5 * * * *') cron('TZ=America/New_York\n00 18 * * 2,4') }
注意:不要使用固定的EST/EDT作为时区配置,美东每年会进行两次冬夏令时切换,使用
America/New_York时区标识可以自动适配时制,避免切换后出现1小时的触发时间偏移。
内容的提问来源于stack exchange,提问作者merilstack
相关产品推荐
相关产品推荐

