更新GitLab服务器证书后Jenkins gitlabCommitStatus功能异常未解决
更新GitLab服务器证书后,Jenkins代理的
gitlabCommitStatus功能停止工作,报错信息如下:Failed to update Gitlab commit status for project xxxxx: Unable to invoke request: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target已更新代理机器的受信任证书,但问题仍未解决。
确认Jenkins代理使用的JVM证书库
Jenkins代理可能未使用系统默认证书库,而是依赖自身运行的JRE的cacerts文件。找到代理对应的JRE路径(例如/opt/jdk/jre/lib/security/cacerts),将新GitLab证书导入该文件:keytool -import -alias gitlab-new-cert -file /path/to/gitlab.crt -keystore /path/to/jre/lib/security/cacerts默认密码为
changeit,导入完成后重启Jenkins代理服务。检查GitLab证书链完整性
确保导入的是完整证书链(包含根证书和中间证书),而非仅服务器证书。可通过openssl s_client -connect gitlab.example.com:443获取完整证书链,将所有证书合并为单个文件后再导入证书库。验证代理网络访问配置
若Jenkins代理通过网关/代理服务器访问GitLab,需确认该代理服务器已更新信任新的GitLab证书,排查是否存在证书拦截导致的路径验证失败。检查gitlabCommitStatus插件配置
进入Jenkins系统配置页面,确认GitLab服务器URL无误,查看插件是否支持单独指定证书文件,若有则更新为新的GitLab证书。强制指定JVM证书库路径
若JVM缓存旧证书未生效,可在Jenkins代理的启动参数中添加-Djavax.net.ssl.trustStore=/path/to/updated/cacerts,强制代理使用更新后的证书库运行。
内容的提问来源于stack exchange,提问作者Daniele

