Tekton任务‘sonarqube-scanner’因JDK错误执行失败
问题分析与解决
错误根源
出现Exec format error加载libjvm.so失败,主要有两个可能原因:
- CPU架构不兼容:
sonarqube-scanner任务使用的镜像CPU架构和集群节点不一致(比如镜像为amd64,节点是arm64),导致无法加载对应架构的JVM库文件。 - JDK版本冲突:你的项目基于JDK17开发,但你使用的
sonarqube-scannerv0.4默认依赖JDK11,扫描JDK17编译的代码时会出现兼容性问题,同时JDK11的库文件也会和环境中的JDK17产生冲突。
可行解决方案
方案1:匹配集群架构的扫描器镜像
修改sonarqube-scanner任务的镜像,使用与集群节点CPU架构一致的版本。比如节点是arm64架构,就用支持arm64的官方镜像:
# 在sonarqube-scanner任务的spec.steps中替换镜像 spec: steps: - name: sonar-scan image: sonarsource/sonar-scanner-cli:4.8.0.2854-arm64v8
如果是amd64架构,使用默认的sonarsource/sonar-scanner-cli:4.8.0.2854即可。
方案2:升级扫描器任务版本并指定JDK17
sonarqube-scanner v0.4版本较老,对JDK17支持不足,建议升级到v0.10及以上版本:
- 获取对应新版本的
sonarqube-scanner任务YAML定义,执行安装:
kubectl apply -f sonarqube-scanner-<version>.yaml
- 修改管道中的任务引用,添加JDK17相关配置:
- name: code-analysis taskRef: name: sonarqube-scanner version: 0.10 # 替换为实际安装的新版本号 runAfter: - maven params: - name: SONAR_HOST_URL value: http://localhost:9000 - name: SONAR_PROJECT_KEY value: quotes - name: SONAR_SCANNER_OPTS value: "-Dsonar.java.jdkHome=/usr/lib/jvm/java-17-openjdk" # 适配镜像中JDK17的实际路径 workspaces: - name: source workspace: source-workspace - name: sonar-settings workspace: sonar-settings
方案3:自定义扫描器镜像
如果官方镜像无法满足需求,自行构建包含JDK17且匹配集群架构的扫描器镜像:
# 基于JDK17镜像构建 FROM eclipse-temurin:17-jdk-alpine RUN apk add --no-cache curl unzip # 安装sonar-scanner RUN curl -sSL https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.8.0.2854.zip -o sonar-scanner.zip && \ unzip sonar-scanner.zip && \ rm sonar-scanner.zip && \ mv sonar-scanner-4.8.0.2854 /opt/sonar-scanner ENV PATH="/opt/sonar-scanner/bin:${PATH}" ENTRYPOINT ["sonar-scanner"]
构建并推送镜像后,修改sonarqube-scanner任务使用该自定义镜像即可。
内容的提问来源于stack exchange,提问作者tm1701
相关产品推荐
相关产品推荐

