You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Jenkins Helm Chart引用镜像中的Java cacerts文件以解决证书错误?

解决Jenkins Helm Chart部署时自签名SSL证书导致的PKIX错误

遇到这种自签名证书引发的Java证书信任问题,不用修改Helm Chart源码,下面几种方法都能解决:

方法1:自定义Jenkins镜像(最稳妥)

直接基于官方Jenkins镜像,把你的自定义cacerts文件嵌进去:

  1. 写个简单的Dockerfile:
FROM jenkins/jenkins:2.387.1-jdk11
# 把本地的自定义cacerts复制到镜像里的Java安全目录
COPY your-custom-cacerts /usr/local/openjdk-11/lib/security/cacerts
  1. 构建镜像并推到你们的私有镜像仓库:
docker build -t 你的私有仓库地址/jenkins-custom-cacerts:2.387.1-jdk11 .
docker push 你的私有仓库地址/jenkins-custom-cacerts:2.387.1-jdk11
  1. 部署Helm Chart时指定这个自定义镜像,比如修改values.yaml:
controller:
  image:
    repository: 你的私有仓库地址/jenkins-custom-cacerts
    tag: 2.387.1-jdk11

或者直接用命令行参数:

helm install jenkins jenkinsci/jenkins \
  --set controller.image.repository=你的私有仓库地址/jenkins-custom-cacerts \
  --set controller.image.tag=2.387.1-jdk11

方法2:用ConfigMap挂载替换cacerts(不用构建镜像)

如果不想做自定义镜像,直接用K8s的ConfigMap把cacerts挂进去:

  1. 先把你的自定义cacerts文件做成ConfigMap:
kubectl create configmap jenkins-custom-cacerts --from-file=./your-custom-cacerts
  1. 修改Helm的values.yaml,添加挂载配置:
controller:
  extraVolumeMounts:
    - name: custom-cacerts
      mountPath: /usr/local/openjdk-11/lib/security/cacerts
      subPath: your-custom-cacerts  # 对应ConfigMap里的文件名
      readOnly: true
  extraVolumes:
    - name: custom-cacerts
      configMap:
        name: jenkins-custom-cacerts

注意:不同JDK版本的cacerts路径不一样,比如JDK8是/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/cacerts,不确定的话可以先跑个官方镜像看看路径:

docker run --rm -it jenkins/jenkins:2.387.1-jdk11 bash -c "find / -name cacerts"

方法3:用Init容器复制cacerts

如果挂载直接替换有问题(比如权限或路径锁定),可以用Init容器先把文件复制到共享卷:

  1. 先按方法2创建好ConfigMap,然后修改values.yaml:
controller:
  initContainers:
    - name: copy-cacerts
      image: busybox:latest
      command: ['sh', '-c', 'cp /custom-cacerts/your-custom-cacerts /shared-cacerts/cacerts && chmod 644 /shared-cacerts/cacerts']
      volumeMounts:
        - name: custom-cacerts
          mountPath: /custom-cacerts
        - name: shared-cacerts
          mountPath: /shared-cacerts
  extraVolumes:
    - name: custom-cacerts
      configMap:
        name: jenkins-custom-cacerts
    - name: shared-cacerts
      emptyDir: {}
  extraVolumeMounts:
    - name: shared-cacerts
      mountPath: /usr/local/openjdk-11/lib/security/cacerts
      subPath: cacerts
      readOnly: true

额外注意点

  • 确保自定义cacerts的权限和原文件一致,一般是644
  • 替换后可以进入Jenkins容器验证:kubectl exec -it <jenkins-pod> -- keytool -list -keystore /usr/local/openjdk-11/lib/security/cacerts,看是否包含你的自签名证书

内容的提问来源于stack exchange,提问作者John Fisher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 13:52:44