如何使Jenkins CI在Debian上使用本地时间而不是UTC


15

我在debian压缩器上安装了Jenkins-ci。

当前默认时区:“美国/多伦多”
现在是当地时间:2012年7月9日星期一,美国东部时间。
现在是世界标准时间:2012年7月9日星期一世界标准时间。

在/ etc / default / rcS文件中,我有:

UTC =否

不幸的是,这不起作用,在詹金斯的系统信息中:

user.timezone Etc / UTC

我搜索了几个小时..很遗憾,找不到修复程序,将不胜感激。

谢谢你的时间


2
6.5年后,我仍然无法配置我的用户个人资料来设置要显示的时区。
mkaatman '19

Answers:


16

启动Jenkins时,您需要将所需的user.timezone值作为JVM参数传递。Java命令行如下所示:

$JAVA_HOME/java -Duser.timezone="America/Toronto" [other JVM parameters] $JENKINS_HOME/jenkins.jar

不幸的是,我不熟悉Debian的安装,但是JVM参数应该在/etc/init.d/jenkins脚本中定义,或者在该脚本引用的属性文件中定义。


谢谢,它工作完美。
drgn 2012年

1
我必须补充,詹金斯(Jenkins)不喜欢TimeTravel到过去:上一次成功:-322毫秒(#30)
drgn 2012年


1
在centos / rhel上,您可以在/ etc / sysconfig / jenkins中进行设置:JENKINS_JAVA_OPTIONS =“-Duser.timezone = America / New_York”
nandoP 2014年

1
我不相信Debian在中正确设置了时区/etc/init.d/rc.local。您可能已经有一个Sysv初始化脚本来启动Jenkins,这可能对您有用。Jenkins网站上有一些示例。该UTC=no/etc/default/rcS没有任何与你的机器上的时区。它告诉存储在硬件时钟中的时间是本地时间还是UTC时间。关于调整时间,请使用ntp或任何其他NTP守护程序作为客户端,因为它会慢慢调整时间而无需花费时间。
Anders

9

三年后,我发现有一些问题需要解决。因此,我将详细说明可接受的答案(正确),并为CentOS添加完整的答案。


陷阱#1:要更改的Jenkins设置

詹金斯(Jenkins)当前有关更改时区的文档说定义user.timezone org.apache.commons.jelly.tags.fmt.timeZone。但是,我发现两者都是必要的。果冻一个作品詹金斯适当和一些插件,在用户一个适用于其他插件。


难题2:要更新的操作系统设置

对于美国东部的CentOS,编辑/etc/sysconfig/jenkins为:

JENKINS_JAVA_OPTIONS="-Dorg.apache.commons.jelly.tags.fmt.timeZone=America/New_York -Duser.timezone=America/New_York"
JENKINS_ARGS=""

如果将这些-D设置放入JENKINS_ARGS,它将无法正常工作。


陷阱#3:重新启动

您必须从命令行重新启动整个服务。简单地做一个詹金斯安全重启充分。所以:

sudo service jenkins restart

完成所有这些操作后,请在Jenkins系统信息面板中检查两个时区设置是否匹配:http : //jenkins.example.com/systemInfo


1
这在CentOS下的docker容器中运行jenkins时有所帮助,但未在/ etc / sysconfig / jenkins中设置选项。这些选项在docker run命令中的docker变量中传递,然后传递给jenkins start命令。
gaoithe

7

在Ubuntu 14.04中,以上解决方案均不适用于我,但是我最终运行了以下命令,该命令可拉出一个界面,在该界面中,时区可以从默认值(未选择)更改为更具体的内容:

sudo dpkg-reconfigure tzdata

首先,系统提示您选择大陆(例如,美洲,亚洲等),然后选择城市,在我的案例中,印度的IST时区为“亚洲/加尔各答”。

请参见UbuntuTime-使用命令行

另外,更改时区后,我重新启动了Jenkins:

sudo /etc/init.d/jenkins stop sudo /etc/init.d/jenkins start

然后验证时间是否在当地IST时间内。在http://<yourservername>/systemInfobishop用户提供的中,在“系统属性”部分下的“ user.timezone”属性中,我现在看到“亚洲/加尔各答”为其值。


2

如果您在Apache Tomcat中运行Jenkins,请将它们添加到<Apache-Tomcat-Dir> /conf/catalina.properties:

user.timezone=America/New_York
org.apache.commons.jelly.tags.fmt.timeZone=America/New_York

两者都需要。


2

如果这与根据cron时间表执行工作有关(即定期构建),则可以按每个作业在cron时间表中设置时区:

TZ=Europe/Dublin
0 7 * * 1-5

0

对于CentOS 7.1(在docker中)的jenkins v2.73.3,我们发现您必须

1.设置操作系统时区,例如“ ln -sf / usr / share / zoneinfo / Asia / Jakarta / etc / localtime”,然后

2.在Manage Jenkins下设置时区,例如'Asia / Jakarta'。

定期执行jenkins:xxxx / restart后,将使用新的时区。


0

添加一个答案以涵盖在CentOS下在Docker容器中运行jenkins时的情况。在这种情况下,可能不会在/ etc / sysconfig / jenkins中设置选项(取决于您的jenkins服务启动脚本)。jenkins.sh脚本用于启动jenkins服务。此jenkins.sh脚本与jenkins-inside-docker项目使用的脚本相似,因此该答案对派生自此的docker项目中的任何jenkins很有用。

https://github.com/jenkinsci/docker/blob/master/jenkins.sh

在下面,我们得到TZ,例如Europe / Dublin,然后将-e $ TZ传递给docker run,以便我们可以拥有一个脚本,该脚本将其写入/ etc / timezone或链接/ etc / localtime,但重要的是在JAVA_OPTS中传递这两个参数: “ -Dorg.apache.commons.jelly.tags.fmt.timeZone = $ TZ -Duser.timezone = $ TZ”。jenkins.sh脚本将它们传递给命令行,以启动jenkins进程。

在Docker主机上创建docker run命令的容器示例时:

TZFILE=$(readlink -f /etc/localtime)
TZ=$(echo $TZFILE|sed s#.*zoneinfo\/##)
TZARG=" -e $TZ "

ID=$(docker run $TARG \
-d \
--user=jenkins \
--name jenkins-${USER} \
--restart always \
-p $HOST_IP:$JENKINS_PORT:${JENKINS_PORT_INTERNAL} \
-p $HOST_IP:$JENKINS_SLAVE_PORT:50000 \
$TZARG \
--env JAVA_OPTS="-Dhudson.Main.development=true \
    -Dhudson.footerURL=$JENKINS_URL \
    -Dorg.apache.commons.jelly.tags.fmt.timeZone=$TZ -Duser.timezone=$TZ \
    -Xms800M -Xmx800M -Xmn400M \
    " \
--env JENKINS_HOME=/var/jenkins_home \
-v $JENKINS_DIR:/var/jenkins_home \
$VARGS \
$ADDITIONALARGS \
$IMAGE \
/bin/tini /usr/local/bin/jenkins.sh \
)
echo "INFO: container ID:$ID" |tee JENKINS.CONTAINER.ID

选项在docker run命令中的docker变量中传递,然后传递给jenkins start命令。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.