Jenkins 在Windows下插件无法安装问题解决

本篇是解决Jenkins在某些机器下无法进行在线插件安装的问题。

关于Jenkins在Windows 的安装启动可以参考:
Jenkins 新版本及插件在Windows下的安装

问题
Windows 10 系统下, Jenkins 2.7 之上的版本在线安装插件是失败, 在以下页面中会出现红色的错误标志。

Jenkins 在Windows下插件无法安装问题解决_第1张图片

点击具体错误详情, 会出现如下错误信息。

sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

此外, 有时候会在插件管理页面出现一段红色的错误提示:

Jenkins 在Windows下插件无法安装问题解决_第2张图片

(注: 上图出现错误提示的页面, 非实际错误页面)

发生场景
发生的场景一般是:

  1. 老版本的Jenkins一般不会出现, 较新版本会出现
  2. 个人电脑安装正常,但是在某些单位内网电脑会出现。

原因及解析
从以上错误信息可以看出, 原因基本上是SSH 验证以及证书的原因。Jenkins 已经使用了https 的地址, 在插件管理的 “Advanced ” 标签页中可以看到:
Jenkins 在Windows下插件无法安装问题解决_第3张图片

也就是Jenkins插件在线获取的地址是: https://updates.jenkins.io/update-center.json。

Jenkins是使用Java实现的, Java在获取https 的时候会验证证书的有效性, 如果是非法的证书, 则不会下载相关的资源, 也就会报握手以及证书等错误信息。

解决方法

网络上搜素有多种解法, 看上去较多的有:

  • 方法1. 更换https 为 http, 也就是在“Advanced ” 标签页中修改https://updates.jenkins.io/update-center.json 为 http://updates.jenkins.io/update-center.json , 提交之后重启Jenkins。
  • 方法2, 切换资源的地址为 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json , 使用清华大学提供的镜像资源地址。

不过, 笔者实验以上两种方法皆无效。 方法1 虽然可以解决 “Check Now”的错误信息, 但是实际下载资源的时候还是使用https, 方法2 更换资源地址, 还是没有解决证书的问题。

终极的解法是在Java添加证书的验证。

如何验证Java访问的站点时安全的

这里有一个Java的类SSLPoke , 使用其可以快速验证使用Java是否可以访问 某个https, 命令如下:

java SSLPoke updates.jenkins.io 443
  • updates.jenkins.io 是地址
  • 443 是https 的默认端口
    如果出现如下“Successfully connected”代表成功, 否则会报异常。 否则就有很大可能是需要安装证书。

在这里插入图片描述

如何快速安装证书呢?

这里也有一个Java类 InstallCert.java
先编译该类:
javac InstallCert.java
在执行安装证书:
java InstallCert updates.jenkins.io
该命令会在目录产生一个 jssecacerts 的证书文件, 将这个文件复制到jre的目录中, 比如:
C:\Program Files\Java\jre1.8.0_211\lib\security

Jenkins插件下载的重定位

安装完 updates.jenkins.io 的证书之后, 发现下载插件依旧会出错, 查看日志发现如下错误信息:

Caused: java.io.IOException: Failed to download from https://updates.jenkins.io/download/plugins/mailer/1.34/mailer.hpi (redirected to: https://get.jenkins.io/plugins/mailer/1.34/mailer.hpi)

从以上错误信息可以看出, 下载插件时会被重定位到https://get.jenkins.io/plugins, 所以也需要信任这个站点。

终极步骤

综合以上分析, 解决插件在线安装的步骤有:

  1. 下载 InstallCert.java 类, 并编译这个类 javac InstallCert.java
  2. 安装 updates.jenkins.io 站点的证书 java InstallCert updates.jenkins.io
  3. 安装 get.jenkins.io 站点的证书 java InstallCert get.jenkins.io
  4. 重启Jenkins

本篇介绍的所有资源及工具的下载地址

  • https://download.csdn.net/download/oscar999/18855774

问题解决心得

  1. 善用日志
  2. 思考文本的根本原因,找准问题根源, 这个问题完全是Java的https访问的证书验证问题, 如果把焦点一直放在Jenkins本身,则就是缘木求鱼了。

你可能感兴趣的:(430-代码控管与系统构建,Jenkins,Windows,plugin)