1. 引言

Jenkins 是一个广泛使用的开源自动化服务器,常用于自动化构建、测试和部署流程。此外,它还能帮助我们将任务组织成高效的任务批次进行执行。

默认情况下,Jenkins 使用的是其运行所在服务器的系统时区。但在某些场景下,我们可能需要切换 Jenkins 的时区设置,以满足不同地区团队的需求。

本文将介绍几种方法,帮助你为所有用户或单个用户修改 Jenkins 的时区设置。

2. 为什么需要修改 Jenkins 的时区?

当团队分布在多个时区时,我们可能希望 Jenkins 的定时任务、构建日志等信息显示为本地时间,以便于协作与调试。此外,在将 Jenkins 与其他系统集成(如日志分析、通知系统等)时,统一时区也有助于数据一致性。

通过调整时区,我们可以确保分布在不同时区的开发团队,在合适的时间进行构建、测试和部署。

3. 创建测试任务

为了更好地演示时区修改的效果,我们先在 Jenkins 中创建一个测试任务。进入 Jenkins 控制台,点击 New Item 创建新任务即可。

创建完成后,查看该任务的构建历史:

Sample job in Jenkins with build history.

此时构建时间通常是基于服务器默认时区(如 UTC)显示的。我们需要将其修改为我们期望的时区。

4. 修改 Jenkins 的 JVM 环境变量

我们可以通过设置 JVM 参数 -Duser.timezone-Dorg.apache.commons.jelly.tags.fmt.timeZone 来指定 Jenkins 使用的时区。这种方法适用于所有用户,但需要管理员权限。

4.1 Linux 系统配置

如果你使用的是 Ubuntu 或其他 Linux 系统,可以编辑 Jenkins 的 systemd 配置文件:

$ sudo systemctl edit jenkins

添加如下内容:

[Service]
Environment="JAVA_OPTS=-Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Karachi"

你也可以使用 user.timezone 参数:

[Service]
Environment="JAVA_OPTS=-Duser.timezone=America/New_York"

保存后重启 Jenkins:

$ sudo systemctl restart jenkins

4.2 Windows 系统配置

如果 Jenkins 安装在 Windows 上,需要编辑安装目录下的 jenkins.xml 文件,找到 <arguments> 标签,添加如下内容:

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

-Duser.timezone=Asia/Karachi

保存后重启 Jenkins 服务。

4.3 验证修改效果

重新登录 Jenkins,查看任务的构建历史时间是否已更新:

Sample job build time in specified time zone after modification.

✅ 此方法修改的是 Jenkins 全局时区,无需修改系统时区,适用于多用户环境。

❌ 缺点是需要重启 Jenkins 服务,对生产环境可能有一定影响。

5. 使用 Jenkins 脚本控制台 (Groovy)

如果你不想重启 Jenkins,可以通过脚本控制台临时修改时区设置。此方法适合临时测试,但重启后会失效。

操作步骤如下:

  1. 登录 Jenkins,进入 Manage Jenkins > Script Console
  2. 执行如下 Groovy 脚本:
System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Karachi')

⚠️ 此方法仅在当前 Jenkins 会话中生效,重启后失效。

如需永久生效,可以将该脚本写入 Jenkins 的初始化脚本中(如 init.groovy.d 目录下的脚本)。

✅ 优点是无需重启 Jenkins,适合快速测试。

❌ 缺点是需要管理员权限,且重启后失效。

6. 设置用户自定义时区

如果你没有管理员权限,也可以为当前用户设置独立的时区。此设置仅影响当前用户的界面显示,不影响其他用户或系统全局设置。

操作步骤如下:

  1. 登录 Jenkins
  2. 点击右上角用户名,进入 Configure
  3. 找到 User Defined Time Zone 选项
  4. 从下拉菜单中选择目标时区,如 Asia/Karachi
  5. 点击保存

Specifying user-specific time zone in Jenkins.

保存后回到 Jenkins 控制台,查看任务构建历史,时间应已更新为你选择的时区。

✅ 优点是无需权限,适合个人使用。

❌ 缺点是仅对当前用户有效,无法影响全局。

7. 总结

本文介绍了三种常见的 Jenkins 时区修改方式:

方法 是否全局生效 是否需要重启 是否需要管理员权限 适用场景
修改 JVM 参数 ✅ 是 ✅ 需要 ✅ 需要 多用户环境,需统一时区
脚本控制台 (Groovy) ❌ 否 ❌ 不需要 ✅ 需要 快速测试、临时修改
用户自定义时区 ❌ 否 ❌ 不需要 ❌ 不需要 个人使用,无权限时
  • 有管理员权限:推荐使用 JVM 参数Groovy 脚本控制台
  • 无管理员权限:使用 用户自定义时区 设置。

根据你的使用场景和权限情况,选择合适的方法即可。


原始标题:How to Change the Time Zone in Jenkins