代理后面的Jenkins docker容器拒绝下载插件证书错误



问题:

在部署Jenkins时,在安装插件时,每个插件都无法下载,并出现以下Java错误:

Caused: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

故障排除:

  • 部署在不在代理后面的环境中,效果很好
  • 尝试更改docker图像类型(使用的"jenkins"one_answers"jenkinsci"都不起作用(此处找到信息
  • 尽管阅读了所有这些帖子,但没有任何帮助
  • 詹金斯似乎试图从URL中提取插件,但无法验证证书。我试着为"卷曲"添加卷曲选项-k〃;但这无济于事。我还试着用curl在容器外下载,看看发生了什么。我似乎需要使用"-kL-curl——代理我们的.proxy.com:1234";实际提取插件url并使其工作。然而,当添加ENV CURL_OPTIONS -Lk --proxy our.proxy.com:1234并启动容器时,我仍然看到相同的错误
  • 阅读这篇关于URL可能需要被列入白名单的文章,但我不认为这是我们的问题,因为A(我可以从一个镜像中提取,而不必调整我们的代理。B(错误表明这是一个认证路径问题
  • 为什么我可以在容器外通过curl+代理获取插件url,但当Java尝试这样做时,我会收到证书错误?从docker日志输出中,我不清楚用于提取插件的java命令,所以我不确定发生了什么
  • 是否有从Java禁用证书验证的选项?我现在只需要这个作为POC工作,所以我现在不在乎验证检查,我可以稍后实现。此外,这是通过一个代理,我没有访问代理CA信任或证书。只想禁用任何建议

环境:

  • Ubuntu服务器18.04
  • Docker版本:20.10.10
  • Docker compose版本:1.29.2

配置文件:

  • Docker Compose文件:
version: '3.7'
services:
jenkins:
container_name: jenkins
build:
context: ./jenkins
dockerfile: ./jenkins.Dockerfile
ports:
- 8080:8080
- 50000:50000
volumes:
- jenkins-data:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
environment:
DOCKER_SOCKET: /var/run/docker.sock
ALL_PROXY: "http://our.proxy.com:1234"
JAVA_OPTS: "-Dhttp.proxyHost=our.proxy.com -Dhttp.proxyPort=1234 -Dhttps.proxyHost=our.proxy.com -Dhttps.proxyPort=1234"
privileged: true
volumes:
jenkins-data:
  • Docker文件:
FROM jenkins/jenkins:latest
USER root
ENV CURL_OPTIONS -k --proxy our.proxy.com:1234

如果运行时环境不能安装插件,那么您可以在可以访问更新中心的环境中通过plugins.txt文件配置要安装的插件。在更新中心可用的环境中构建容器映像,然后将映像复制到最终目的地。

一个例子是https://github.com/MarkEWaite/docker-lfs/tree/lts-with-plugins它将插件二进制文件作为大文件存储在Git存储库中,并在plugins.txt文件中定义精确的插件版本。生成的容器映像包括插件,因此不需要访问更新中心。

最新更新