写点什么

Jenkins 踩坑 | job 创建、参数化、定时构建及时区偏差问题解决

  • 2022 年 8 月 31 日
    北京
  • 本文字数:1240 字

    阅读完需:约 4 分钟

1)启动 Jenkins 后在首页点击"开始创建一个新任务"。2)输入任务名称,选择自由风格,点击“确定”。1) 任意输入描述,然后勾选"丢弃旧的构建", 在"保持构建的最大个数中"输入 3。1)勾选"参数化构建过程",选择添加"字符参数"2)设置参数名称、默认值和描述 1)在"构建触发器"中勾选"定时构建",日程表中输入 H2/ * * * *,表示每两分钟构建一次。1)在构建中选择执行 shell,简单的执行一条打印语句,打印上面设置好的参数 param;设置好之后保存即可。


  • 可以看到构建结果是每 2 分钟构建一次,且只保留最近的 3 次构建,参数 param 使用了默认值 Jenkins。

  • 打开控制台输出可以看到执行的日志信息。

  • 如果想要修改参数值,选择 Build with Parameters,修改参数,点击开始构建即可。


在上述设置定时构建时,输入了一行命令 H2/ * * * *来表示每隔 2 分钟构建一次,这是一种 crontab 的写法,具体描述分五个部分:


  • 星号(*):代表所有可能的值,例如 month 字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。

  • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”。

  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如 “2-6” 表示 “2,3,4,5,6”。

  • 正斜线(/):可以用正斜线指定时间的间隔频率,例如 “0-23/2” 表示每两小时执行一次。同时正斜线可以和星号一起使用,例如 */10,如果用在 minute 字段,表示每十分钟执行一次。但是实际在 Jenkins 中进行定时构建时,写法相似但是还是有区别,还是以上述的 H2/ * * * 来表示每隔 2 分钟为例,当我们用/2 * * * *写法时:可以看到 Jenkins 建议我们使用 H 来代表通配符,因此在表示每隔多久时建议使用 H/的方式。


另外,如果表示每天上午 9 点构建,如果使用 0 9 * * *:可以看到 Jenkins 建议我们使用 H 9 * * *的方式:下面是一些常用定时方式的参考示例:1.每 30 分钟构建一次:H/30 * * * *。2.每 2 小时构建一次:H H/2 * * *。3.每天早上 9 点构建一次:H 9 * * *。4.每天 8 点、12 点、21 点各构建一次:H 8,12,21 * * *。5.周一至周五,每天 22 点到 23 点之间每隔 3 分钟构建一次:H/3 22-23 * * 1-5。运行完毕后,会发现一个问题,构建的时间与我们实际的时间不一致:


  • Jenkins 显示时间

  • 系统实际时间因为我们是用 Docker 部署的,所以再通过打印 Docker 容器的时间进行查看:再进入"系统管理"->"系统信息"->"user.timezone"查看:综上所述可以确定因为 Jenkins 容器使用的是 UTC 时间,和我们的北京时间差了正好 8 个小时,针对我们是 Docker 部署的,解决方法如下 (其他直接在系统部署的可以另行百度~)。在 Jenkins 容器启动的时候添加参数启动后再次查看"系统管理"->"系统信息"->"user.timezone",发现时区已修改为上海:查看构建历史,发现时间已于系统时间保持一致,修改完成:


以上,欢迎大家一起交流探讨。


免费领取:性能测试+接口测试+自动化测试+测试开发+测试用例+简历模板+测试文档

http://qrcode.testing-studio.com/f?from=infoQ&url=https://ceshiren.com/t/topic/16565

用户头像

社区:ceshiren.com 微信:ceshiren2021 2019.10.23 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料,实时更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬。

评论

发布
暂无评论
Jenkins 踩坑 | job 创建、参数化、定时构建及时区偏差问题解决_霍格沃兹测试开发学社_InfoQ写作社区