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

从Jenkins运行sonar-scanner遇权限拒绝错误,求排查方向

Jenkins运行sonar-scanner权限拒绝错误排查

问题描述

从Jenkins运行sonar-scanner时触发权限拒绝错误,控制台输出如下:

+ sonar-scanner -Dsonar.login=**** -Dsonar.projectBaseDir=.
/var/lib/jenkins/workspace/Mtr-Pipeline_develop@2@tmp/durable-0080bcff/script.sh: 1: /var/lib/jenkins/workspace/Mtr-Pipeline_develop@2@tmp/durable-0080bcff/script.sh: sonar-scanner: Permission denied

已在Jenkins全局凭证中配置令牌并绑定t-m-sonar-login变量,确认该错误并非由令牌导致,寻求具体排查方向。

相关配置代码

Jenkins阶段代码

stage('SonarQube scan') {
    agent {
        dockerfile { filename 'sonar/Dockerfile' }
    }
    steps {
        withCredentials([string(credentialsId: 't-m-sonar-login', variable: 'SONAR_LOGIN')]) {
            script {
                unstash 'coverage'
                unstash 'testResults'
                sh 'sonar-scanner -Dsonar.login="$SONAR_LOGIN" -Dsonar.projectBaseDir=. || true'
            }
        }

    }
}

sonar/Dockerfile

FROM node:15-buster

################
# Install java #
################
RUN apt-get update && \
    DEBIAN_FRONTEND=noninteractive \
    apt-get -y install openjdk-11-jre-headless && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

############################
# Install SonarQube client #
############################
WORKDIR /root

RUN apt-get install -y curl grep sed unzip
RUN curl --insecure -o ./sonarscanner.zip -L https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.4.0.2170-linux.zip
RUN unzip -q sonarscanner.zip
RUN rm sonarscanner.zip
RUN mv sonar-scanner-4.4.0.2170-linux sonar-scanner

ENV SONAR_RUNNER_HOME=/root/sonar-scanner
ENV PATH $PATH:/root/sonar-scanner/bin

# Include Sonar configuration and project paths
COPY ./sonar/sonar-runner.properties ./sonar-scanner/conf/sonar-scanner.properties

# Ensure Sonar uses the provided Java for musl instead of a borked glibc one
RUN sed -i 's/use_embedded_jre=true/use_embedded_jre=false/g' /root/sonar-scanner/bin/sonar-scanner

排查方向

  • 修复sonar-scanner执行权限:在Dockerfile中添加RUN chmod +x /root/sonar-scanner/bin/sonar-scanner命令,确保脚本拥有可执行权限。解压后的zip包可能默认没有设置执行权限,这是常见触发权限拒绝的原因。
  • 验证PATH配置与可执行文件路径:在Jenkins的Sonar阶段中,先执行sh 'which sonar-scanner'或sh 'echo $PATH',确认系统能正确找到sonar-scanner的位置。如果找不到,检查Dockerfile中的PATH环境变量是否正确添加了/root/sonar-scanner/bin。
  • 检查容器执行用户权限:node:15-buster镜像默认以root用户运行,但如果Jenkins启动容器时指定了非root用户,会无法访问/root目录下的sonar-scanner。可以修改Dockerfile,将sonar-scanner安装到公共目录(如/usr/local/sonar-scanner),或者在Dockerfile末尾添加USER root明确指定执行用户。
  • 重新构建镜像并检查日志:删除现有镜像后重新构建,查看构建过程中是否有解压失败、文件权限异常的日志,确保sonar-scanner的所有文件都被正确安装。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:20:44