记录一次Jenkins(Docker版)升级版本

升级前置说明

Docker版本部署的 Jenkins 两种升级方式:

使用 docker 部署的 Jenkins 如果要升级版本,一般有两种方式:

  1. 替换 docker container 中的 jenkins.war 包,参考:【Jenkins】如何升级Jenkins版本
  2. 找到新版本的容器镜像,重建容器。

我更倾向于使用方式2,因为方式1只是替换了容器种的 .war 包,如果容器发生重建,Jenkins 的版本将会回退,如果你在升级后又安装了新版本的插件发生版本回退有可能直接引起 Jenkins 服务异常。

本文着重说下方式2。无论使用哪种方式,操作前务必要事先备份!事先备份!事先备份!

为什么要升级 Jenkins 版本?

一定是在业务上有需求,要使用某个版本的插件,当前 Jenkins 版本较低不能够满足,才会想要去升级,比如 HTTP Request Plugin

提示需要 Jenkins 版本 >= 2.282 及以上,并包括其他插件的更高版本。而我当前 Jenkins 版本为 Jenkins 2.263.1 需要升级 Jenkins 及其他一些依赖插件的版本才可以正常使用。

切记不能盲目的去升级 Jenkins 版本,会造成现用的一些插件无法正常使用,更严重的将会引起 Jenkins 异常:

升级 Jenkins 版本的选择:

Jenkins 的版本不能盲目选择最新版,Jenkins 的各个插件的版本与 Jenkins 自身的版本都有强关联性,跨度太大依然会造成上述问题。本着够用的原则去选择版本,并非越新越好。

清华大学镜像站 查看 Jenkin 版本号,在满足插件对版本需求的前提下,选择一个相对中位数的 Jenkins 版本号:

然后去 DockerHub for Jenkins 找到其对应的 docker 镜像版本:

1
docker pull jenkins/jenkins:2.346.3-2-lts-centos7

备份 Jenkins

方式1:ThinBackup 插件备份

方式2:备份 jenkins_home 路径

1
2
3
4
5
6
7
$ cd /data/jenkins/
$ cpsave jenkins_home/ ./
$ ls -l
total 8
drwxr-xr-x 3 jenkins jenkins 113 Jun 8 11:28 jenkins_backup
drwxr-xr-x 15 jenkins jenkins 4096 Jun 8 11:29 jenkins_home
drwxr-xr-x 15 jenkins jenkins 4096 Jun 8 11:29 'jenkins_home.save.2023-06-08[11:42:59]'

开始升级

docker-compose.yml

销毁当前容器:

1
2
cd /etc/docker/jenkins/
docker-compose down

修改 docker-compose.yml 新版本容器镜像:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ vim docker-compose.yml
version: '3'
services:
jenkins:
# image: jenkins/jenkins:2.263.1-lts-centos7
image: jenkins/jenkins:2.346.3-2-lts-centos7
container_name: jenkins
restart: always
working_dir: /var/jenkins_home
ports:
- 8080:8080
- 50000:50000
environment:
- TZ=Asia/Shanghai
- LANG=en_US.UTF-8
volumes:
- /etc/timezone:/etc/timezone # timezone
- /data/jenkins/jenkins_backup:/data/backup/jenkins # jenkins backup
- /data/jenkins/jenkins_home:/var/jenkins_home # jenkins_home
- /data/jenkins/jenkins_home:/data/jenkins_home # jenkins_home
- /usr/bin/docker:/usr/bin/docker # docker
- /var/run/docker.sock:/var/run/docker.sock # docker

重建容器:

1
docker-compose up -d

观察容器日志:

1
2
3
4
$ docker logs -f jenkins
# .....
2023-06-08 03:46:02.878+0000 [id=36] INFO jenkins.InitReactorRunner$1#onAttained: Completed initialization
2023-06-08 03:46:02.971+0000 [id=22] INFO hudson.WebAppMain$3#run: Jenkins is fully up and running

末尾处有输出 Jenkins is fully up and running 表示 Jenkins 启动成功。

登录 Jenkins 后台验证:

系统管理没有对 Jenkins 的大版本 error 报错,说明这个大版本是没问题的。

升级常用插件版本

Jenkins 版本升级,会导致部分插件图标显示不正常。

请将常用插件升级版本后解决:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 更新
Pipeline: Stage View
Pipeline: Build Step
Pipeline: Multibranch
Pipeline: Nodes and Processes
Pipeline Utility Steps https://www.jianshu.com/p/fb12e47d7b11
Git Parameter
ThinBackup
Role-based Authorization Strategy
Image Tag Parameter
Publish Over SSH
Localization Support

# 新安装
HTTP Request

由于部分插件之前对版本有耦合性,因此插件更新切勿无脑全选,可能会造成Jenkins 异常。

解决插件版本异常:

可以看到 HTTP Request Plugin 所报的异常,无外乎是它所依赖的几个插件版本太低:

1
2
3
4
5
6
7
8
9
部分插件由于缺少依赖无法加载。要恢复这些插件提供的功能,需要修复这些问题并重启 Jenkins。

Dependency errors:

HTTP Request Plugin (1.16)
Update required: Pipeline: Nodes and Processes (workflow-durable-task-step 2.39) to be updated to 2.40 or higher
Update required: Credentials Plugin (credentials 2.5) to be updated to 2.6.1 or higher
Update required: Pipeline: Step API (workflow-step-api 2.23) to be updated to 2.24 or higher
Update required: Script Security Plugin (script-security 1.77) to be updated to 1.78 or higher

到插件管理,把对应的插件手动升级其版本:

重启后到 系统管理验证:

业务验证

最后业务构建验证、流水线验证。