Jenkins时间有问题,这三种解决方法你可以知道
目录前言一、脚本命令行二、Docker容器时区2.1 查看服务器时区2.2 设置服务器时区2.3 设置容器时区三、Rancher环境变量前言环境情况 工作中使用java+selenium+testng+maven+jedis+jenkins做WebUI自动化测试的过程中。使用Docker安装了Jenkins、Selenium-Hub、node...
目录
- 前言
- 一、脚本命令行
- 二、Docker容器时区
- 三、Rancher环境变量
- 四、扩展
- 在Jenkins中,可以`针对不同登录用户设置时区`,操作步骤如下图。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7de72fcb0f08a169f3f0a35d1f272976.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ddf2f3c5fa5dff95541b59a7905761b8.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/15548ef6c83990739884ed37ac327764.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c85973901adb4c309779b1de3978ee08.png)
前言
- 环境情况
工作中使用java+selenium+testng+maven+jedis+jenkins
做WebUI自动化测试的过程中。使用Docker
安装了Jenkins
、Selenium-Hub
、node-Chrome
(挂载在hub节点上)。项目运行逻辑为:Jenkins触发Git中的项目代码,项目代码触发hub节点,然后使用hub节点下的node节点进行UI自动化测试
。
-
问题现象
-
现象1:Jenkins
构建项目的时间
与当前时间对不上。
-
现象2:控制台输出中,
项目代码中获取的当前时间
与当前时间对不上。
-
现象3:最后再Jenkins上执行代码后,由于
各个容器间的时区不一致
,导致测试出错。
-
-
解决思路
- 将Jenkins、Selenium-Hub、node-chrome容器的时区设置成Asia/Shanghai。
- 将Jenkins、Selenium-Hub、node-chrome容器的时区设置成Asia/Shanghai。
一、脚本命令行
系统管理
->脚本命令行
->输入命令->点击运行
System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone','Asia/Shanghai')
二、Docker容器时区
2.1 查看服务器时区
使用timedatectl | grep Time
命令查看时区信息,使用date
命令查看当前时间。
[rzh@hcf-web3 ~]$ timedatectl | grep Time
Time zone: Asia/Shanghai (CST, +0800)
[rzh@hcf-web3 ~]$ date
2020年 05月 05日 星期二 17:56:54 CST
2.2 设置服务器时区
使用timedatectl set-timezone "Asia/Shanghai"
命令可以设置服务器当前时区为上海
[root@localhost yff]# timedatectl | grep Time
Time zone: America/Los_Angeles (PDT, -0700)
[root@localhost yff]# date
Tue May 5 03:06:45 PDT 2020
//使用timedatectl set-timezone "Asia/Shanghai"命令设置服务器当前时区为上海
[root@localhost yff]# timedatectl set-timezone "Asia/Shanghai"
[root@localhost yff]# date
Tue May 5 18:06:56 CST 2020
[root@localhost yff]# timedatectl | grep Time
Time zone: Asia/Shanghai (CST, +0800)
[root@localhost yff]#
2.3 设置容器时区
由于设置过程中可能需要进入容器中,所以需要进入容器内,就使用docker exec -u 0 -it [容器id] /bin/bash
进入容器中。
//查看运行中的Docker容器
[root@localhost yff]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a23b83c6196b jenkins/jenkins:lts "/sbin/tini -- /usr/…" 3 hours ago Up 3 seconds 0.0.0.0:8080->8080/tcp, 50000/tcp jenkins
//进入指定容器 docker exec -u 0 -it [容器id] /bin/bash
[root@localhost yff]# docker exec -u 0 -it a23b83c6196b /bin/bash
root@a23b83c6196b:/#
在设置完本地时区后,就是设置容器的时区。按照操作文件可以分为两种:一种为操作/etc/localtime
文件,另一种为操作/usr/share/zoneinfo/Asia/Shanghai
文件。按照操作命令也可以分为两种:一种是宿主机
中执行docker cp
命令,另一种是Docker容器
中执行ln -sf
命令。
[root@localhost yff]# cat /etc/localtime
TZif ¢¡y ˊл>ӂՌ¿ֆfpם| i ~ !I}"g¡ #)_$G %|&'e &G (р~pCDTCSTTZif2
ÿÿÿÿ~6C)ÿÿÿÿ ¢ÿÿÿÿ¡yÿǙ^ÿÿÿÿ ÿʓ½ÿÿÿÿˊÿʼ@ÿÿÿÿл>ÿӋ{ÿÿÿÿӂÿԅ"ÿÿÿÿՌ¿ÿռ¿ÿÿÿÿֆfpÿÿÿÿםÿÿ| i ~ !I}"g¡ #)_$G %|&'e &G (рq־LMTCDTCST
CST-8
[root@localhost yff]# cat /usr/share/zoneinfo/Asia/Shanghai
TZif ¢¡y ˊл>ӂՌ¿ֆfpם| i ~ !I}"g¡ #)_$G %|&'e &G (р~pCDTCSTTZif2
ÿÿÿÿ~6C)ÿÿÿÿ ¢ÿÿÿÿ¡yÿǙ^ÿÿÿÿ ÿʓ½ÿÿÿÿˊÿʼ@ÿÿÿÿл>ÿӋ{ÿÿÿÿӂÿԅ"ÿÿÿÿՌ¿ÿռ¿ÿÿÿÿֆfpÿÿÿÿםÿÿ| i ~ !I}"g¡ #)_$G %|&'e &G (рq־LMTCDTCST
CST-8
下面给出了几中种命令,在执行命令后,进入容器中,使用date
命令,查看容器内的时区是否与服务器本地时区一致(查看是CST还是UTC,且是否与服务器本地一致)。时区一致为CST就可以了。
- 宿主机执行(/etc/localtime)
//将本地的localtime文件复制到node-chrome容器(b5352282c931为node-chrome的id)中
docker cp /etc/localtime b5352282c931:/etc/localtime
- 宿主机执行(/usr/share/zoneinfo/Asia/Shanghai)
//将本地的/usr/share/zoneinfo/Asia/Shanghai文件复制到node-chrome容器中
docker cp /usr/share/zoneinfo/Asia/Shanghai 6e5178698ed7:/etc/localtime
- 容器中执行(/usr/share/zoneinfo/Asia/Shanghai)
//在node-chrome容器中执行下面命令,链接宿主机localtime
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
三、Rancher环境变量
如果是使用Rancher管理镜像并生成容器搭建情况下,配置jenkins、hub、node-chrome三个镜像生成容器时,添加环境变量:TZ=Asia/Shanghai
四、扩展
在Jenkins中,可以针对不同登录用户设置时区
,操作步骤如下图。
更多推荐
所有评论(0)