docker安装低版本的jenkins-2.346.3,在线安装对应版本插件失败的解决方法


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

这几天在强化jenkins知识过程中,自己基于docker搭建了2.346.3版本的Jenkins,但是在jenkins启动后,却发现不论是选择自定义插件安装还是默认插件安装都会下载失败。网上找了很多办法说是将原来的updates.jenkins.io源替换为国内的清华源,但是尝试后发现,替换为清华源之后,加载的插件都是最近版本的jenkins插件,而不是我指定的2.346.3jenkins版本的插件。所以为了不使用手动下载插件在导入这种笨办法(最开始使用这种方法,要下载各种依赖插件,太痛苦了~~~~),才有了这篇文章。


提示:以下是本篇文章正文内容,下面案例可供参考

一、网上最多的默认解决方法

1、jenkins界面配置清华源

配置方法如下所示,配置后不需要重启jenkins
清华源地址: https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

yaml 复制代码
注意事项:
	该方法配置后,jenkins加载的可安装插件是最新版本的jenkins插件,而不是低版本的jenkins插件。
	仍然导致低版本的jenkins不能正常安装对应的插件。
	如果你的jenkins是最新版本,则直接配置这个源即可使用

2、替换default.json文件

网上还有一种常见的解决方法就是手动替换default.json文件并重启Jenkins,同样该方法也只适用于最新版本的jenkins,而不适用于低版本jenkins

shell 复制代码
[root@jenkins updates]#  sed -i 's#updates.jenkins.io/download/plugins#mirrors.tuna.tsinghua.edu.cn/jenkins/plugins#g' /export/jenkins/updates/default.json
[root@jenkins updates]#  sed -i 's#www.google.com#www.baidu.com#g' /export/jenkins/updates/default.json

因此,网上这两种方法都是基于最新版本jenkins 的解决方案,那么低版本的jenkins安装插件怎么解决呢?难不成就只能采用手动下载导入的笨方法了吗?

二、解决低版本Jenkins在线安装插件问题

卖个关子,在此前,先给大家看一下手动下载导入插件的痛点

1.手动下载插件并导入

yaml 复制代码
jenkins插件下载地址:
	https://plugins.jenkins.io/


此处以blueocean插件为例,展示手动下载的通点,太痛辣

看下面这个图,你就下载吧宝贝,这一个插件就依赖这么多其他插件,而且其他插件还可能依赖别的插件,你要是手动下载安装,估计心里疯狂mmp

再看jenkins手动导入hpi结尾插件,它T*M还只能一次导入一个,还不能多个导入,如果导入一个A插件进行安装,这个A插件还依赖别的B插件的话,那么sorry,你只能去先下载安装B插件,如果B插件依赖C插件,不好意思,俄罗斯套娃已开始,你就花10几分钟找插件下插件吧

2.低版本jenkins在线安装对应版本的插件

终于解决啦

2.1.安装nginx

在jenikins机器或者别的机器进行安装nginx,确保和jenkins机器网络通即可。此处为了节省资源,我在jenkins机器上进行了安装

shell 复制代码
[root@jenkins ~]# yum -y install nginx

2.2.添加插件转发配置文件

为了省事直接修改nginx.conf主配置文件,对server块部分添加一些代码

yaml 复制代码
    server {
        listen       80;
 #       listen       [::]:80;
        server_name  192.168.56.120;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
        location / {
           sub_filter_once off; #关闭对页面中每个匹配项只替换一次的限制,使得所有匹配项都可以被替换。
           sub_filter_types *; #设置 sub_filter 替换的内容类型,这里使用 * 表示所有类型的内容都会被替换。
           sub_filter 'https://updates.jenkins.io' 'http://192.168.56.120';
            #在页面内容中,将 https://updates.jenkins.io 替换成 http://192.168.56.120。
            #这是为了将 Jenkins 的更新地址改为本地 IP 地址,避免直接访问外部地址。
           proxy_pass https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/;
       }
         location /download/plugins {
            proxy_pass http://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins; #清华源插件地址
        }
yaml 复制代码
上述 Nginx 配置主要用于反向代理和处理 Jenkins 更新和插件的请求:
	1、将 / 路径下的 Jenkins 更新 URL 替换为本地服务器的 IP 地址,并转发到清华镜像。
	2、将 /download/plugins 路径下的插件下载请求代理到清华镜像站点。
	3、因为Jenkins源站点是https协议的,jenkins 会校验SSL证书有效性,
		因此使用sub_filter模块将update-center.json返回的内容修改为http协议的

2.3.jenkins界面配置Update Site


为什么配置这个地址http://192.168.56.120/dynamic-2.346/update-center.json?

yaml 复制代码
1、https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/ 
这是清华源更新插件地址,这个目录下包含多个版本的插件,如下图1所示

2、在对应的插件版本目录下,有一个update-center.json文件,这个文件包含了对应插件的下载地址,如下图2所示
yaml 复制代码
补充:
	1、dynamic-2.346代表安装的Jenkins是非LTS版本 2.346代表jenkins版本号
	2、dynamic-stable-2.346代表安装的是jenkins的LTS版本
	
因此,在选择时注意这两个区分。如上述,我配置的是dynamic-2.346。


2.4.报错解决

配置了上述地址并提交后,点击Jenkins插件管理-->可用插件会报如下错误

查看jenkins日志,有如下报错,认证校验失败的错误
这是因为修改了默认的updater-center.json的内容.Jenkins会对其进行校验,校验逻辑在源码core/src/main/java/hudson/PluginManager.java中checkUpdateServer方法中可以看到

EVERE hudson.PluginManager#doCheckUpdatesServer: 尝试检查更新中心1次后失败。最后的异常是:Signature verification failed in update site 'default' (显示详情)

复制代码
java.security.cert.CertificateExpiredException: NotAfter: Thu May 02 22:40:15 CST 2024
	at sun.security.x509.CertificateValidity.valid(CertificateValidity.java:277)
	at sun.security.x509.X509CertImpl.checkValidity(X509CertImpl.java:677)
	at sun.security.provider.certpath.BasicChecker.verifyValidity(BasicChecker.java:190)
	at sun.security.provider.certpath.BasicChecker.check(BasicChecker.java:144)
	at sun.security.provider.certpath.PKIXMasterCertPathValidator.validate(PKIXMasterCertPathValidator

`

2.5.认证失败报错解决方法

yaml 复制代码
	解决方法:
		在jenkins启动中添加hudson.model.DownloadService.noSignatureCheck=true启动参数即可
		该参数对应的源码位置在core/src/main/java/hudson/model/DownloadService.java signatureCheck方法

dockers启动的Jenkins添加这个启动参数

shell 复制代码
[root@jenkins ~]# docker run -itd --restart=always --name jenkins -p 18080:8080 -p 18090:50000 \
-v /export/jenkins:/export/jenkins \
-v /var/run/docker.sock:/var/run/docker.sock  \
-v /usr/bin/docker:/usr/bin/docker \
-e JAVA_OPTS=-Dhudson.model.DownloadService.noSignatureCheck=true \ #指定参数
--memory 4G \
jenkins20241103:latest

非容器化启动的jenkins
在 vim /etc/sysconfig/jenkins中添加以下配置,然后重启Jenkins

2.6.插件下载验证

在此之前,已经安装了role-stragy插件,如下所示

验证: 在线安装ansible插件、pipeline插件

在线安装过程


总结

终于在几次试验后,解决了低版本Jenkins在线下载插件的问题。终于不用再因手动下插件而烦恼了~~~,同时希望这篇文章能帮助到有类似问题的求助者们!!!

相关推荐
意疏8 小时前
【Linux 篇】Docker 的容器之海与镜像之岛:于 Linux 系统内探索容器化的奇妙航行
linux·docker
墨鸦_Cormorant8 小时前
使用docker快速部署Nginx、Redis、MySQL、Tomcat以及制作镜像
redis·nginx·docker
Code_Artist8 小时前
Docker镜像加速解决方案:配置HTTP代理,让Docker学会科学上网!
docker·云原生·容器
wanmei00210 小时前
Dockerfile复制目录进入镜像里
docker
inter_peng10 小时前
[Docker-显示所有容器IP] 显示docker-compose.yml中所有容器IP的方法
tcp/ip·docker·eureka
Linux运维日记10 小时前
k8s1.31版本最新版本集群使用容器镜像仓库Harbor
linux·docker·云原生·容器·kubernetes
一名路过的小码农12 小时前
ceph 18.2.4二次开发,docker镜像制作
ceph·docker·容器
ernesto_ji14 小时前
Jenkins下载安装、构建部署到linux远程启动运行
linux·servlet·jenkins
xiangshangdemayi14 小时前
Windows环境GeoServer打包Docker极速入门
windows·docker·容器·geoserver·打包·数据挂载
程序员JerrySUN15 小时前
熟悉的 Docker,陌生的 Podman
linux·docker·容器·系统架构·podman