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

为君一笑 提交于 2020-01-13 19:53:29

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

1.现象

在这里插入图片描述

在这里插入图片描述

2.查看时间

2.1 查看宿主机时间

[root@VM_0_9_centos ~]# date
Mon Jan 13 19:05:05 CST 2020

使用date命令即可查看当前宿主机时间
在这里插入图片描述

2.2 查看容器时间

[root@VM_0_9_centos ~]# docker exec -ti jenkins /bin/bash
root@b62434a5f6ff:/# date
Mon Jan 13 11:07:03 UTC 2020

通过这个docker exec --help命令查看docker exec的用法。
在这里插入图片描述

结果发现两者的时间相差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

root@b62434a5f6ff:/# docker cp /etc/localtime b62434a5f6ff:/etc/

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

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

root@b62434a5f6ff:/# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
root@b62434a5f6ff:/# date
Mon Jan 13 19:09:02 CST 2020

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

4.原因分析

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

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

root@b62434a5f6ff:/# cat /etc/timezone
Etc/UTC
root@b62434a5f6ff:/#

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

root@b62434a5f6ff:/# sed -i ‘s/UTC/UTC+8/’ /etc/timezone
root@b62434a5f6ff:/# cat /etc/timezone
Etc/UTC+8
root@b62434a5f6ff:/#

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!