从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
相关产品推荐
相关产品推荐

