一、问题描述

首先我的实验环境是在一台linux系统的服务上安装了一个Jenkins的服务,然后在windows系统上通过URL调用Jenkins服务,Linux服务器上是格林威治时间,windows上是北京时间,在测试时我发现Jenkins在不同的地方会调用不同的时间,比如在进行流水线测试时,我发现构建历史中使用的是Linux上的格林威治时间,而阶段视图中使用的是windows系统上的北京时间。
然后我将一台受控节点的时间设置成和Jenkins所在服务器不同的时间,想看一下到底为什么会有两个时间,所以我尝试打印了一下时间戳并在受控节点上进行结果查看,发现Jenkins中存在系统时间和浏览器时间两种时间选项,但是浏览器时间只是获取浏览器的时区设置再进行时区计算,并不是真正调用浏览器当前时间,否则该浏览器在受控节点上,应该与受控节点时间相同。
在这里插入图片描述
在这里插入图片描述

时区问题导致的问题首先就是定时失效的问题,在某一次的测试中我发现我设定的定时构建未能准时启动,然后在我定时时间的8个小时以后进行了启动,所以我对jenkins的时间设置进行了调查,首先我发现构建历史和阶段视图中的时间就存在8个小时的时间差:
在这里插入图片描述

因为8个小时的时间差所以想到可能是因为中国处于东八区,所以想查看一下系统设置中设定的时区,根据Manage Jenkins -> System Information找到系统信息,在系统属性中的最下面我们能找到时间戳属性,系统时间被设定为格林威治时间,这是因为这台服务器本身的系统时间就是格林威治时间。

在这里插入图片描述

二、解决方式

1、针对单个构建设定定时使用的时区

这个方法的局限性是只是修改了这一个项目的定时时间戳,但是反过来想,如果需要在一台服务器上需要针对不同的项目在不同的时区时间里启动就可以使用这个方法,只需要在设置定时时在上面加上一行说明时间戳的指令即可。
在这里插入图片描述在这里插入图片描述

2、临时修改系统时区

根据Manage Jenkins -> Script Console找到指令框,在指令框中投入下面的指令,可以将时区变为北京时间:
System.setProperty(‘org.apache.commons.jelly.tags.fmt.timeZone’, ‘Asia/Shanghai’)

在这里插入图片描述
这个临时的意思是,可以修改显示出来的时间为北京时间,但是配置文件中并未进行修改,因此如果重启Jenkins服务或者重新加载配置文件的话,时区会恢复成格林威治时间,显示出来的时间也是。
在这里插入图片描述

在这里插入图片描述

3、永久修改系统时区

Jenkins在启动服务的时候是使用Java进行启动的,因此只要修改启动Java的指令,设定指定的时区即可。
首先在Jenkins的安装目录下找到 jenkins.xml(默认安装目录是在C:\Program Files\Jenkins\jenkins.xml),在arguments中添加时间戳设置-Duser.timezone=Asia/Shanghai,保存后重启Jenkins服务。

在这里插入图片描述

重启后的Jenkins可以看到不管是界面显示还是系统信息栏都变成了北京时间,是一个一劳永逸的办法。
在这里插入图片描述
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐