Jenkins修改时区(Docker)

本文主要解决在Docker环境下运行的Jenkins服务与容器内时间不一致的问题。通过分析和尝试,发现需要修改容器的/etc/localtime和/etc/timezone文件来同步时区。详细步骤包括确认时区问题,尝试官方建议和修改两个配置文件,最终通过指定Docker构建命令成功调整Jenkins时区。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明:该文章是针对jenkins运行在docker容器中时,jenkins的时间与容器的时间不一致。而非jenkins直接运行在系统各种。不过解决问题的思路都是一致的。

问题

通过官方的jenkins容器运行jenkins服务,但是发现jenkins的时间与docker容器内的时间相同,但都与北京时间正好差8个小时。基本确定时区问题

查看jenkins的docker容器时间:

docker exec 

查看Jenkins的时间

在“jenkins的UI-》系统管理-》系统信息”中有user.timezone的字段

分析

时间相差8个小时,基本可以确定时区问题。所以上网搜索了些内容,基本解决办法如下

### 修改 Jenkins 服务器的时区设置 对于不同部署方式下的 Jenkins 实例,调整其时区的方法有所差异。 #### 对于 Windows 上通过安装包形式运行的 Jenkins 可以在 Jenkins 的配置文件 `jenkins.xml` 中加入 JVM 参数来改变时区。具体操作为编辑位于默认路径 C:\Program Files\Jenkins 下的 jenkins.xml 文件,在 `<arguments>` 节点内增加 `-Duser.timezone=Asia/Shanghai` 这样的参数[^1]。完成上述改动之后记得要重新启动 Jenkins 服务以便使新的设置生效。 ```xml <service> ... <arguments>-Xrs -jar "%BASE%\jenkins.war" --httpPort=8080 -Duser.timezone=Asia/Shanghai</arguments> ... </service> ``` #### 当 Jenkins 是基于 Docker 容器化部署时 一种方法是在启动容器时挂载宿主机的时间配置到容器里,即利用 `-v /etc/localtime:/etc/localtime` 来保持两者之间的一致性;另一种则是直接登录至容器内部并执行命令复制目标地区的 timezone 文件覆盖 `/etc/localtime` 同时更新 `/etc/timezone` 文件的内容指向所需的地区名称,例如: ```bash cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime echo 'Asia/Shanghai' >/etc/timezone ``` 此外还可以考虑在构建镜像阶段就做好这些工作从而简化后续运维流程[^5]。 #### 使用 Java 属性的方式 无论是哪种类型的 Jenkins 环境都可以尝试通过编程手段影响应用层面所感知到的时间区域。这可以通过向 Jenkins 初始化脚本追加一行代码实现,比如将下面这段话放在合适的位置(如 Groovy Hook Scripts 或者初始化插件中) ```groovy System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai') ``` 这种方法适用于那些无法轻易触及底层操作系统的情况但是效果可能不如前两种持久稳定[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值