docker+jenkins构建项目历史记录(Build History)时间与控制台日志时间不一致问题

在使用docker+jenkins的构建历史记录(Build History)时间不正确

1.现象

docker+jenkins构建项目历史记录(Build History)时间与控制台日志时间不一致问题

docker+jenkins构建项目历史记录(Build History)时间与控制台日志时间不一致问题

2.查看时间

2.1 查看宿主机时间

[[email protected]_0_9_centos ~]# date
Mon Jan 13 19:05:05 CST 2020

使用date命令即可查看当前宿主机时间
docker+jenkins构建项目历史记录(Build History)时间与控制台日志时间不一致问题

2.2 查看容器时间

[[email protected]_0_9_centos ~]# docker exec -ti jenkins /bin/bash
[email protected]:/# date
Mon Jan 13 11:07:03 UTC 2020

通过这个docker exec --help命令查看docker exec的用法。
docker+jenkins构建项目历史记录(Build History)时间与控制台日志时间不一致问题

结果发现两者的时间相差6个多小时。

宿主机采用了CST时区,CST应该是指(China Shanghai Time,东八区时间)。
容器采用了UTC时区,UTC应该是指(Coordinated Universal Time,标准时间)。

3.解决方法

3.1 共享主机的localtime

创建容器的时候指定启动参数,挂载localtime文件到容器内,保证两者所采用的时区是一致的。

docker run -p 8080:8080 -p 50000:5000 --name jenkins -u root -v /mydata/jenkins_home:/var/jenkins_home /etc/localtime:/etc/localtime:ro -d jenkins/jenkins:lts
jenkins:2.19.3

3.2 复制主机的localtime

[email protected]:/# docker cp /etc/localtime b62434a5f6ff:/etc/

此时容器的时间已经设置成和宿主机相同的时间。

3.3 复制上海时区到/etc/localtime(建议用这个方法)

[email protected]:/# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[email protected]:/# date
Mon Jan 13 19:09:02 CST 2020

这里时间就变成CST时间【东八区时间】了。

4.原因分析

因为jenkins是java开发,java环境读取的时间是根据/etc/timezone的。

查看一下这个文件的内容:

[email protected]:/# cat /etc/timezone
Etc/UTC
[email protected]:/#

因此需要把UTC改为CST,或者在UTC的基础上加8小时。

[email protected]:/# sed -i ‘s/UTC/UTC+8/’ /etc/timezone
[email protected]:/# cat /etc/timezone
Etc/UTC+8
[email protected]:/#

回到jenkins去构建发现时间已经正常,若不正常就重启jenkins。