本文为霍格沃兹测试学院优秀学员 Jekins 学习踩坑笔记。测试开发技能进阶,文末加群。
1、创建 job
1)启动 Jenkins 后在首页点击"开始创建一个新任务"。
![9310a4e83d52598b76561763a2f56381.png](https://i-blog.csdnimg.cn/blog_migrate/35871f6bce4c666d9a45677b89b58e08.jpeg)
2)输入任务名称,选择自由风格,点击“确定”。
![ad428cf65429ae9d1c0fe76f5ea6d02a.png](https://i-blog.csdnimg.cn/blog_migrate/3fd3a5c812ee2599107971184ba52b05.jpeg)
2、构建保持配置
1) 任意输入描述,然后勾选"丢弃旧的构建", 在"保持构建的最大个数中"输入 3。
由于 Jenkins 构建产生的日志等信息会保存在本机磁盘中,这样无限构建任务的话就会占用很多磁盘空间,因此可以在这里对旧的构建进行配置丢弃,可以选择以天数为条件,也可以选择保持的个数,这里就以保持 3 个构建数为例。
![6f9c5e37ae23b8f1d517b361414522f9.png](https://i-blog.csdnimg.cn/blog_migrate/227407a99509710ceb1bc09794ca0e41.jpeg)
3、参数化设置
1)勾选"参数化构建过程",选择添加"字符参数"
![f02a50cbd0cb650d43d2b6d1b28f49bd.png](https://i-blog.csdnimg.cn/blog_migrate/81f41ca033f68e9d5896f241b505e16c.jpeg)
2)设置参数名称、默认值和描述
![7f1ba504ebec058876b0a0ef3eff8510.png](https://i-blog.csdnimg.cn/blog_migrate/5cb8cf339b8a929448c1964f0e1da2d4.jpeg)
4、定时构建
1)在"构建触发器"中勾选"定时构建",日程表中输入H2/ * * * *,表示每两分钟构建一次。
![60d69152ee215858f3871365691572fd.png](https://i-blog.csdnimg.cn/blog_migrate/8cd26be9127900bd223e49e21481e26a.jpeg)
5、Execute Shell
1)在构建中选择执行 shell,简单的执行一条打印语句,打印上面设置好的参数param;设置好之后保存即可。
![d7d5d27af1d14d6eba6bd01b5e7a99dd.png](https://i-blog.csdnimg.cn/blog_migrate/2840061fd446d2afe50f6215aaf84047.jpeg)
6、结果展示
- 可以看到构建结果是每 2 分钟构建一次,且只保留最近的 3 次构建,参数 param使用了默认值Jenkins。
![1e56c0a19e020dfe88d76d7c087bd6be.png](https://i-blog.csdnimg.cn/blog_migrate/522e3230f9f5f085b359d770b9f472fb.jpeg)
- 打开控制台输出可以看到执行的日志信息。
![6c3dabe3b55c0a0aeede3995572e49c1.png](https://i-blog.csdnimg.cn/blog_migrate/9283193c35f7074921e25da8220fdf05.jpeg)
- 如果想要修改参数值,选择Build with Parameters,修改参数,点击开始构建即可。
![b983ff5a4f99adbe07824703bf5e9dba.png](https://i-blog.csdnimg.cn/blog_migrate/82b148032150c0928653279900263007.jpeg)
![e59bfd111fc4a8776d4db0052f8b01b3.png](https://i-blog.csdnimg.cn/blog_migrate/bf158e2ddddbd2066ec5affb44cb54a0.jpeg)
7、补充说明
7.1 定时构建时间描述
在上述设置定时构建时,输入了一行命令H2/ * * * *来表示每隔 2 分钟构建一次,这是一种crontab的写法,具体描述分五个部分:
分钟 小时 日期 月份 星期几* * * * *- - - - -| | | | || | | | +----- 星期中星期几 (0 - 7) (星期天 为 0 或 7)| | | +---------- 月份 (1 - 12) | | +--------------- 一个月中的第几天 (1 - 31)| +-------------------- 小时 (0 - 23)+------------------------- 分钟 (0 - 59)
- 星号(*):代表所有可能的值,例如 month 字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
- 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”。
- 中杠(-):可以用整数之间的中杠表示一个整数范围,例如 “2-6” 表示 “2,3,4,5,6”。
- 正斜线(/):可以用正斜线指定时间的间隔频率,例如 “0-23/2” 表示每两小时执行一次。同时正斜线可以和星号一起使用,例如 */10,如果用在 minute 字段,表示每十分钟执行一次。
但是实际在 Jenkins 中进行定时构建时,写法相似但是还是有区别,还是以上述的H2/ * * * *来表示每隔 2 分钟为例,当我们用*/2 * * * *写法时:
![de308a325a9de9d8273b9158c26acdbb.png](https://i-blog.csdnimg.cn/blog_migrate/46aeb084170bf2ebdd4aa8831256c660.jpeg)
可以看到 Jenkins 建议我们使用H来代表通配符,因此在表示每隔多久时建议使用H/的方式。
另外,如果表示每天上午 9 点构建,如果使用0 9 * * *:
![dacbd54979f5d90c2bd8312bda87366e.png](https://i-blog.csdnimg.cn/blog_migrate/89a0c82d58026d34ad2fc3e21ef3cb77.jpeg)
可以看到 Jenkins 建议我们使用H 9 * * *的方式:
下面是一些常用定时方式的参考示例:
- 每 30 分钟构建一次:H/30 * * * *。
- 每 2 小时构建一次:H H/2 * * *。
- 每天早上 9 点构建一次:H 9 * * *。
- 每天 8 点、12 点、21 点各构建一次:H 8,12,21 * * *。
- 周一至周五,每天 22 点到 23 点之间每隔 3 分钟构建一次:H/3 22-23 * * 1-5。
7.2 时间不一致
7.2.1 现象原因
运行完毕后,会发现一个问题,构建的时间与我们实际的时间不一致:
- Jenkins 显示时间
![8ed6b6ca4b864386b1d0f9d40e4d79e9.png](https://i-blog.csdnimg.cn/blog_migrate/d2ef0384e6814e08632e424760481558.jpeg)
![b27863e48c43fd6ce71d257e2962bcbf.png](https://i-blog.csdnimg.cn/blog_migrate/4889d397fe1d41f3d6d39faf036186e8.jpeg)
- 系统实际时间
![8fc44698af04f6d6872156710c275047.png](https://i-blog.csdnimg.cn/blog_migrate/68c222df87818726d72acf30e264cd53.jpeg)
因为我们是用 Docker 部署的,所以再通过打印 Docker 容器的时间进行查看:
jenkins@0520b8208ffb:/$ dateFri Apr 10 01:35:30 UTC 2020jenkins@0520b8208ffb:/$ exitexitxxxdeMacBook-Pro:jenkins_home xxx$ date2020 年 4 月 10 日 星期五 09 时 35 分 35 秒 CST
再进入"系统管理"->"系统信息"->"user.timezone"查看:
![d83515a7b454b579bb0baf21cd906fb7.png](https://i-blog.csdnimg.cn/blog_migrate/5730c6473dc0f9a1c218764b4c767938.jpeg)
综上所述可以确定因为 Jenkins 容器使用的是 UTC 时间,和我们的北京时间差了正好 8 个小时,针对我们是 Docker 部署的,解决方法如下 (其他直接在系统部署的可以另行百度~)。
7.2.2 解决方法
在 Jenkins 容器启动的时候添加参数
$ docker run ... -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai
启动后再次查看"系统管理"->"系统信息"->"user.timezone",发现时区已修改为上海:
![f2a39ae4f980282952a55a220117e3b8.png](https://i-blog.csdnimg.cn/blog_migrate/6ec66d6d46c4d0686f8d18dc6c9e0d6b.jpeg)
查看构建历史,发现时间已于系统时间保持一致,修改完成:
![9edd25a93cf39264908327e7916774d1.png](https://i-blog.csdnimg.cn/blog_migrate/3fea9aeaabd90920c781ca00de550092.jpeg)
以上,欢迎大家一起交流探讨。
(文章来源于霍格沃兹测试学院)