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


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

文章目录

  • 前言
  • 一、网上最多的默认解决方法
    • 1、jenkins界面配置清华源
    • 2、替换default.json文件
  • 二、解决低版本Jenkins在线安装插件问题
    • 1.手动下载插件并导入
    • 2.低版本jenkins在线安装对应版本的插件
      • 2.1.安装nginx
      • 2.2.添加插件转发配置文件
    • 2.3.jenkins界面配置Update Site
    • 2.4.报错解决
    • 2.5.认证失败报错解决方法
    • 2.6.插件下载验证
  • 总结


前言

这几天在强化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

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

在这里插入图片描述在这里插入图片描述

2、替换default.json文件

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

[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.手动下载插件并导入

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机器上进行了安装

[root@jenkins ~]# yum -y install nginx

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

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

    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; #清华源插件地址}
上述 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?

1、https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/ 
这是清华源更新插件地址,这个目录下包含多个版本的插件,如下图1所示2、在对应的插件版本目录下,有一个update-center.json文件,这个文件包含了对应插件的下载地址,如下图2所示
补充: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.认证失败报错解决方法

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

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

[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在线下载插件的问题。终于不用再因手动下插件而烦恼了~~~,同时希望这篇文章能帮助到有类似问题的求助者们!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/59628.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SIwave:释放信号网络分析仪的强大功能

SIwave 是一种电源完整性和信号完整性工具。信号网络分析器求解器是 SIwave 中的工具之一。 Signal Net Analyzer 是 SIwave 信号完整性包的一部分。它可以快速计算走线的信号完整性。它计算阻抗、延迟、损耗和许多其他东西。它允许用户研究迹线损耗和任何缺陷对注入信号的影响…

stm32 踩坑笔记

串口问题: 问题:会改变接收缓冲的下一个字节 串口的初始化如下,位长度选择了9位。因为要奇偶校验,要选择9位。但是接收有用数据只用到1个字节。 问题原因: 所以串口接收时会把下一个数据更改

在 CSS 中,gap 是 布局容器(flex 或 grid)的属性。它用于设置容器内子元素之间的间距。

在 CSS 中,gap 是 布局容器(flex 或 grid)的属性。它用于设置容器内子元素之间的间距。以下是 gap 属性在不同布局中的应用: 1. 在 CSS Grid 布局中 gap 定义了网格行和列之间的间距。可以分别使用 row-gap 和 column-gap 设置行…

Linux权限解析:用户、组和权限的协同

​​​​​​​在Linux系统中,权限决定了谁能做什么。本文将指导你如何掌握这些权限,以确保你的系统既安全又高效! 目录 1.shell命令及其运行原理 2.Linu权限的概念 (1) 用户 (2) 切换用户命令su (3) 指令提权命令sudo (4) 什么是权限…

神经网络基础--什么是神经网络?? 常用激活函数是什么???

前言 本专栏更新神经网络的一些基础知识;案例代码基于pytorch;欢迎收藏 关注, 本人将会持续更新。 神经网络 1、什么是神经网络 人工神经网络( Artificial Neural Network, 简写为ANN)也简称为神经网络…

猫头虎分享: AI设计利器 Recraft详解与基础使用教程

🦁猫头虎分享:AI设计利器 Recraft——全面解析与教程 大家好,我是猫头虎!今天为大家带来一款非常炙手可热的 AI 设计工具 —— Recraft 的深度介绍与详细教程。这款工具自推出以来,就迅速获得了全球设计师的青睐。那么…

Python进阶之IO操作

文章目录 一、文件的读取二、文件内容的写入三、之操作文件夹四、StringIO与BytesIO 一、文件的读取 在python里面,可以使用open函数来打开文件,具体语法如下: open(filename, mode)filename:文件名,一般包括该文件所…

《安富莱嵌入式周报》第345期:开源蓝牙游戏手柄,USB3.0 HUB带电压电流测量,LCR电桥前端模拟,开源微型赛车,RF信号扫描仪,开源无线电收发器

周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 本周更新一期视频教程 第5期:RTX5/FreeRTOS全家桶源码工程综合实战模板集成CANopen组件(2024-1…

「Mac畅玩鸿蒙与硬件20」鸿蒙UI组件篇10 - Canvas 组件自定义绘图

Canvas 组件在鸿蒙应用中用于绘制自定义图形,提供丰富的绘制功能和灵活的定制能力。通过 Canvas,可以创建矩形、圆形、路径、文本等基础图形,为鸿蒙应用增添个性化的视觉效果。本篇将介绍 Canvas 组件的基础操作,涵盖绘制矩形、圆…

用流量策略做多出口实验

一、拓扑: 二、配置过程: 1、配置 IP 地址,配置动态路由协议 OSPF 2、AR2 上,配置高级 ACL,允许 ospf 流量、1 到 6、2 到 8、deny 所有 3、写流分类,抓取流量特征 4、写流行为,配置流量动作 5、…

【Golang】sql.Null* 类型使用(处理空值和零值)

sql.NullString 和 sql.NullInt64 类型(以及其他类似的 sql.Null* 类型)在处理数据库操作时非常有用,尤其是在 Go 语言的 database/sql 包中。它们的主要用途包括: 表示 NULL 值: 在数据库中,NULL 表示“没…

【前端】如何在 JSX 中使用条件语句和循环

在 JSX 中使用条件语句和循环是常见的需求,尤其是在构建动态用户界面时。以下是如何在 JSX 中使用条件语句和循环的详细说明。 条件语句 1. 三元运算符 三元运算符是最简单的条件语句形式,适用于简单的条件判断。 const isLoggedIn true;const ele…

Rust移动开发:Rust在Android端集成使用介绍

Andorid调用Rust 目前Rust在移动端上的应用,一般作为应用sdk的提供,供各端使用,目前飞书底层使用Rust编写通用组件。 该篇适合对Android、Rust了解,想看如何做整合,如果想要工程源码,可以评论或留言有解疑…

UE hard/soft reference| DDX DDY | Unity pcg color

目录 1.虚幻引擎性能优化 (附0跳转Unity对应机制) hard reference and soft reference 1. 硬引用(Hard Reference) 2. 软引用(Soft Reference) 3. 使用原则 2.空间梯度转法线 DDX DDY节点 ​编辑 …

【UE5】一种老派的假反射做法,可以用于移动端,或对反射的速度、清晰度有需求的地方

没想到大家这篇文章呼声还挺高 这篇文章是对它的详细实现,建议在阅读本篇之前,先浏览一下前面的文章,以便更好地理解和掌握内容。 这种老派的假反射技术,适合用于移动端或对反射效果的速度和清晰度有较高要求的场合。该技术通过一…

前端学习Day12 CSS盒子的定位(相对定位篇“附练习”)

一、相对定位 使用相对定位的盒子会相对于自身原本的位置,通过偏移指定的距离,到达新的位置。盒子的本体仍处于文档流中。使用相对定位,除了要将 position 属性值设置为 relative 外,还需要指定一定的偏移量。其中,水…

基于微信小程序的移动学习平台的设计与实现+ssm(lw+演示+源码+运行)

摘 要 由于APP软件在开发以及运营上面所需成本较高,而用户手机需要安装各种APP软件,因此占用用户过多的手机存储空间,导致用户手机运行缓慢,体验度比较差,进而导致用户会卸载非必要的APP,倒逼管理者必须改…

git 工具原理

git 目录 git git的使用 了解git的三个区域 具体操作 如何下载别人上传到git的工程 -- 可以参考菜鸟教程,包括安装配置git Git 安装配置 | 菜鸟教程 -- Git 是一种分布式版本控制系统,用于管理软件项目的源代码。它是由 Linux 之父 Linus Torval…

Linux操作系统:学习进程_对进程的深入了解

目录 前言 开篇 一、进程概念 二、进程的描述与管理 1、如何描述与管理 2、Linux中的PCB-task_struct 3、对进程组织的理解 三、进程的属性 1、系统创建进程 2、查看进程 3、进程的标识符 4、退出进程 1>ctrlc 2>kill命令杀死进程 5、用户进程的创建方式…

力扣:225 用队列实现栈

栈、队列 栈: 弹夹,后进先出 队列: 排队,先进先出 描述: var MyStack function () {// 定义两个数组,模拟队列this.queue []this._queue [] };/** * param {number} x* return {void}*/ MyStack.protot…