欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【转】 Jenkins修改时区(Docker)

程序员文章站 2022-05-27 13:33:54
...

问题

通过官方的jenkins容器运行jenkins服务,但是发现jenkins的时间与docker容器内的时间相同,但都与北京时间正好差8个小时。基本确定时区问题

查看jenkins的docker容器时间:

docker exec

查看Jenkins的时间

在“jenkins的UI-》系统管理-》系统信息”中有user.timezone的字段

分析

时间相差8个小时,基本可以确定时区问题。所以上网搜索了些内容,基本解决办法如下

方法1

jenkins官方修改时区的方法。但是基本都是通过修改jenkins、java的参数来达到目的的。目前使用docker容器没办法处理。

方法2

修改/etc/localtime文件的方法。按照这个方法处理了,但是容器的系统时间与当地时间相同了,但是jenkins的时间还是相差8个小时。

再分析

既然docker容器的时间正确了,但是jenkins的时间还是不对的,说明jenkins的时区使用的不是/etc/localtime,而是另有他处。

在jenkins-》系统管理-》系统信息中可以看到有关时区的是user.timezone属性值是Etc/UTC。哪里存放的这个值呢,应该是/etc/timezone了。所以尝试下/etc/timezone的设置。

$docker exec my-jenkins cat /etc/timezone

Etc/UTC

可以看到时区是Etc/UTC,基本上可以确定是这里导致的了

备注:通过验证debian系列才有timezone这个文件的,在centos中是没有这个文件的。所以确定jenkins的docker容器是基于debian系的linux

解决

修改/etc/localtime,修改容器的时间
修改/etc/timezone,修改jenkins的时区
最终构建docker容器的命令如下(如有其他参数,请自行添加其他参数)

docker run -d --name ci --privileged=true -v /etc/localtime:/etc/localtime -v /[my_path]/timezone:/etc/timezone jenkins

或者

docker run -d --name ci --privileged=true -v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime -v /[my_path]/timezone:/etc/timezone jenkins

将/[my_path]/timezone修改为对应的路径
如果docker宿主机系统中不存在timezone文件,可以自行创建timezone文件(或者从别的地方拷贝),timezone文件的内容如下:
Asia/Shanghai