Gitlab Pipeline执行Sonarqube测试失败:自签名证书PKIX路径构建错误
问题
在私有网络中部署了Sonarqube(访问地址sonar.localdomain)和Gitlab(访问地址git.localdomain),两者均使用自签名SSL证书。通过Gitlab Pipeline执行Sonarqube测试时,出现以下错误:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
当前Pipeline配置如下:
sonarqube-check: stage: test image: name: sonarsource/sonar-scanner-cli:latest entrypoint: [""] variables: SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar" GIT_DEPTH: "0" cache: key: "${CI_JOB_NAME}" paths: - .sonar/cache script: - sonar-scanner
解决方案
错误原因是Sonar Scanner依赖的JVM不信任Sonarqube的自签名SSL证书,需将该证书导入JVM的信任存储,修改后的Pipeline配置如下:
sonarqube-check: stage: test image: name: sonarsource/sonar-scanner-cli:latest entrypoint: [""] variables: SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar" GIT_DEPTH: "0" SONAR_CERT_PATH: "/tmp/sonar.crt" CACERTS_PATH: "/usr/lib/jvm/java-17-openjdk/lib/security/cacerts" # 根据镜像Java版本调整路径 CACERTS_PASSWORD: "changeit" # JVM默认信任存储密码 cache: key: "${CI_JOB_NAME}" paths: - .sonar/cache script: # 1. 获取Sonarqube的自签名证书 - openssl s_client -connect sonar.localdomain:443 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ${SONAR_CERT_PATH} # 2. 将证书导入JVM信任存储 - keytool -importcert -file ${SONAR_CERT_PATH} -alias sonar-local -keystore ${CACERTS_PATH} -storepass ${CACERTS_PASSWORD} -noprompt # 3. 执行Sonar扫描 - sonar-scanner
额外说明
- 如果Gitlab的自签名证书也导致代码拉取等环节出现SSL错误,可重复上述步骤导入Gitlab证书,仅需修改
openssl命令中的地址为git.localdomain:443,并设置不同的证书别名。 - 若不确定镜像的Java版本,可在
script开头添加java -version命令查看,对应调整CACERTS_PATH(比如Java11的路径通常为/usr/lib/jvm/java-11-openjdk/lib/security/cacerts)。 keytool是JDK自带工具,sonarsource/sonar-scanner-cli镜像已预装,无需额外安装。
内容的提问来源于stack exchange,提问作者Sean
相关产品推荐
相关产品推荐

