Jenkins踩坑job创建、参数化、定时构建及时区偏差问题解决
本文为霍格沃兹测试学院优秀学员 Jekins 学习踩坑笔记。测试开发技能进阶,文末加群。
1、创建 job
1)启动 Jenkins 后在首页点击"开始创建一个新任务"。
2)输入任务名称,选择自由风格,点击确定。
2、构建保持配置
1) 任意输入描述,然后勾选"丢弃旧的构建", 在"保持构建的最大个数中"输入 3。
由于 Jenkins 构建产生的日志等信息会保存在本机磁盘中,这样无限构建任务的话就会占用很多磁盘空间,因此可以在这里对旧的构建进行配置丢弃,可以选择以天数为条件,也可以选择保持的个数,这里就以保持 3 个构建数为例。
3、参数化设置
1)勾选"参数化构建过程",选择添加"字符参数"
2)设置参数名称、默认值和描述
4、定时构建
1)在"构建触发器"中勾选"定时构建",日程表中输入H2/ * * * *,表示每两分钟构建一次。
5、Execute Shell
1)在构建中选择执行 shell,简单的执行一条打印语句,打印上面设置好的参数param;设置好之后保存即可。
6、结果展示
- 可以看到构建结果是每 2 分钟构建一次,且只保留最近的 3 次构建,参数 param使用了默认值Jenkins。
- 打开控制台输出可以看到执行的日志信息。
- 如果想要修改参数值,选择Build with Parameters,修改参数,点击开始构建即可。
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 * * * *写法时:
可以看到 Jenkins 建议我们使用H来代表通配符,因此在表示每隔多久时建议使用H/的方式。
另外,如果表示每天上午 9 点构建,如果使用0 9 * * *:
可以看到 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 显示时间
- 系统实际时间
因为我们是用 Docker 部署的,所以再通过打印 Docker 容器的时间进行查看:
jenkins@0520b8208ffb:/$dateFriApr1001:35:30UTC2020jenkins@0520b8208ffb:/$exitexitxxxdeMacBook-Pro:jenkins_homexxx$date2020年4月10日星期五09时35分35秒CST
再进入"系统管理"->"系统信息"->"user.timezone"查看:
综上所述可以确定因为 Jenkins 容器使用的是 UTC 时间,和我们的北京时间差了正好 8 个小时,针对我们是 Docker 部署的,解决方法如下 (其他直接在系统部署的可以另行百度~)。
7.2.2 解决方法
在 Jenkins 容器启动的时候添加参数
$ docker run ... -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai
启动后再次查看"系统管理"->"系统信息"->"user.timezone",发现时区已修改为上海:
查看构建历史,发现时间已于系统时间保持一致,修改完成:
以上,欢迎大家一起交流探讨。
(文章来源于霍格沃兹测试学院)
-
上一篇
用云原生CICD取代Jenkins脚本化手工操作,KodeRover数倍提升企业软件验证&交付效率
-
下一篇
,你应该能看到
其中的管理服务,如果没有看到,请尝试重新安装web deploy工具
双击管理服务器,
请留意这里的端口号,以及IP地址限制这两栏,
若你未使用默认端口,在配置Visual studio中的发布配置文件时就需要为你的服务器指定端口,
若这里的IP地址限制中,未指定的客户端的访问全为禁止,那么你需要指定你的发布客户端所在IP被允许访问
若以上两点未做到,在发布时会出现 could not connect to the remote computer(IP) using the specified process (" Web Management Service ") xxx
有了以上步骤后,你的Visual studio在发布时就能 成功 connect了,但是依然可能发布失败
在IIS中,选中你将要发布的网站
自动化发布用jenkins?还可以试试WebDeploy
服务器配置