永久修改以容器化方式运行的Jenkins系统时间

用dockerfile修改官方镜像

加上环境变量ENV TZ=Asia/Shanghai

或者

修改容器启动脚本/usr/local/bin/jenkins.sh,给java传入启动参数:
-Duser.timezone=Asia/Shanghai

-Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Shanghai

docker run的时候修改

运行docker run的时候加上下面三种选项中的一种: 

-e JAVA_OPTS='-Duser.timezone=Asia/Shanghai' 

-e TZ='Asia/Shanghai'

-e JAVA_OPTS='-Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Shanghai'

或者

docker run 命令最后添加上面的JAVA_OPTS参数中的一种,这是直接传入给容器内 /usr/local/bin/jenkins.sh(ENTRYPOINT) 的参数,比如:

-Duser.timezone=Asia/Shanghai

或者

用bind mounts把修改好的jenkins.sh替换进容器内文件 /usr/local/bin/jenkins.sh 。注意:由于容器内是uid 1000的用户运行这个脚本,记得加上执行权限:chmod o+x  jenkins.sh

3.如果启动容器的时候没有加参数,想要永久修改时区

可以在$JENKINS_HOME目录下创建文件init.groovy文件,或者创建目录$JENKINS_HOME/init.groovy.d/,并在这个目录下面创建任何以.groovy结尾的文件,在任意一个上述文件内填入下面内容即可,这些文件内容会在jenkins每次启动后加载。

System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')

(不建议在这时修改启动脚本 /usr/local/bin/jenkins.sh 因为每次更换容器都要重启修改一次)

参考资料

wiki文档:
https://wiki.jenkins.io/display/JENKINS/Change+time+zone
https://wiki.jenkins.io/display/JENKINS/Post-initialization+script

dockerfile:
https://github.com/jenkinsci/docker/blob/master/Dockerfile-centos

容器内启动脚本:
/usr/local/bin/jenkins.sh