目录
- 前言
- 一、脚本命令行
- 二、Docker容器时区
- 2.1 查看服务器时区
- 2.2 设置服务器时区
- 2.3 设置容器时区
- 三、Rancher环境变量
- 四、扩展
- 在Jenkins中,可以`针对不同登录用户设置时区`,操作步骤如下图。 ![在这里插入图片描述](https://s2.51cto.com/images/blog/202403/02100757_65e289fd0adc054636.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=) ![在这里插入图片描述](https://s2.51cto.com/images/blog/202403/02100757_65e289fd2c9c413203.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=) ![在这里插入图片描述](https://s2.51cto.com/images/blog/202403/02100757_65e289fd51f9333594.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=) ![在这里插入图片描述](https://s2.51cto.com/images/blog/202403/02100757_65e289fd7656f2620.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
前言
- 环境情况
工作中使用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。
一、脚本命令行
系统管理
->脚本命令行
->输入命令->点击运行
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中,可以针对不同登录用户设置时区
,操作步骤如下图。
针对不同登录用户设置时区
,操作步骤如下图。