如果 Jenkins 系统里的显示时间仍然慢了 8 小时,这通常是因为 Jenkins 的 JVM 时区配置 未正确设置。Jenkins 是基于 Java 的应用程序,它的时间由 JVM 的默认时区决定。

以下是解决 Jenkins 系统时间显示慢 8 小时问题的详细方法:


1. 检查 Jenkins 的 JVM 时区配置

Jenkins 的时区由 JVM 的 user.timezone 参数决定。如果未显式设置,JVM 会使用默认时区(通常是 UTC)。

查看 Jenkins 的当前时区
  1. 登录 Jenkins 控制台。
  2. 进入 Manage Jenkins > System Information。
  3. 查找 user.timezone 属性,确认当前时区。

如果 user.timezone 显示为 UTC 或其他非预期时区,则需要修改 JVM 的时区配置。


2. 修改 Jenkins 的 JVM 时区

方法 1:通过环境变量设置时区

在运行 Jenkins 容器时,通过环境变量 JAVA_OPTS 或 JENKINS_JAVA_OPTIONS 设置 JVM 时区。

使用 docker run 命令
docker run -d \
  --name jenkins \
  -p 8080:8080 -p 50000:50000 \
  -e JAVA_OPTS="-Duser.timezone=Asia/Shanghai" \
  jenkins/jenkins:lts
使用 docker-compose

在 docker-compose.yml 中添加环境变量:

version: '3'
services:
  jenkins:
    image: jenkins/jenkins:lts
    container_name: jenkins
    ports:
      - "8080:8080"
      - "50000:50000"
    environment:
      - JAVA_OPTS=-Duser.timezone=Asia/Shanghai
方法 2:修改 Jenkins 容器的启动脚本

如果 Jenkins 容器已经运行,可以通过修改启动脚本设置时区。

  1. 进入 Jenkins 容器:
    docker exec -it jenkins /bin/bash
    
  2. 编辑 Jenkins 启动脚本(通常位于 /usr/local/bin/jenkins.sh):
    vi /usr/local/bin/jenkins.sh
    
  3. 找到 exec java 行,添加 -Duser.timezone=Asia/Shanghai 参数:
    exec java -Duser.timezone=Asia/Shanghai -jar /usr/share/jenkins/jenkins.war "$@"
    
  4. 保存并退出,然后重启容器:
    docker restart jenkins
    

3. 验证 Jenkins 时区

  1. 登录 Jenkins 控制台。
  2. 进入 Manage Jenkins > System Information。
  3. 查找 user.timezone 属性,确认时区已正确设置为 Asia/Shanghai。

4. 检查 Jenkins 系统配置

如果 JVM 时区配置正确,但 Jenkins 的时间仍然不正确,可能是 Jenkins 系统配置问题。

检查 Jenkins 系统时间
  1. 登录 Jenkins 控制台。
  2. 进入 Manage Jenkins > System Information。
  3. 查找 user.timezone 和 user.country,确保时区和国家/地区设置正确。
安装并配置 Time Zone 插件
  1. 登录 Jenkins 控制台。
  2. 进入 Manage Jenkins > Manage Plugins。
  3. 在 Available 选项卡中搜索 Time Zone 插件并安装。
  4. 安装完成后,进入 Manage Jenkins > Configure System。
  5. 找到 Time Zone 配置项,设置正确的时区(例如 Asia/Shanghai)。
  6. 保存配置。

5. 检查宿主机和容器时间

确保宿主机和容器的时间同步。

检查宿主机时间
date
检查容器时间
docker exec jenkins date

如果宿主机和容器时间不一致,可以参考以下方法同步时间:

  • 挂载宿主机的 /etc/localtime 和 /etc/timezone:
    docker run -d \
      --name jenkins \
      -p 8080:8080 -p 50000:50000 \
      -v /etc/localtime:/etc/localtime:ro \
      -v /etc/timezone:/etc/timezone:ro \
      jenkins/jenkins:lts
    

6. 重启 Jenkins 服务

完成以上配置后,重启 Jenkins 服务以应用更改。

重启 Jenkins 容器
docker restart jenkins

总结

  • 根本原因:Jenkins 的 JVM 时区未正确配置,导致时间显示慢 8 小时。
  • 解决方法:
    1. 通过 JAVA_OPTS 或 JENKINS_JAVA_OPTIONS 设置 JVM 时区。
    2. 安装并配置 Jenkins 的 Time Zone 插件。
    3. 确保宿主机和容器的时间同步。
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐