为啥 Sonar-scanner 4.2 无法创建用户缓存?
Posted
技术标签:
【中文标题】为啥 Sonar-scanner 4.2 无法创建用户缓存?【英文标题】:Why Sonar-scanner 4.2 is unable to create user cache?为什么 Sonar-scanner 4.2 无法创建用户缓存? 【发布时间】:2020-04-25 18:30:39 【问题描述】:使用 dockerized 声纳扫描仪 4.2 官方图像,我尝试运行声纳扫描仪的示例 Docker 运行操作,我得到
unable to create user cache: /usr/src/.sonar/cache
caused by: Java.nio.file.accessdeniedexception: /usr/src/.sonar
每次。图像上的用户有问题吗?难以置信,因为这是官方的声纳扫描器Docker 镜像
【问题讨论】:
【参考方案1】:我在 OpenShift 下使用配置了声纳扫描仪插件的 Jenkins 容器遇到了同样的问题。
为了修复它,我在 Jenkins 的配置中的 Global Properties 部分下添加了一个环境变量 SONAR_USER_HOME
,指向 /tmp
。
【讨论】:
【参考方案2】:在 Linux 上,我必须手动创建文件夹并设置正确的 chmod:
mkdir .sonar .sonar/cache .scannerwork
sudo chmod -R 777 .sonar
sudo chmod -R 777 .scannerwork
为了自动化扫描,我创建了一个 docker-compose-sonarqube.yml,其中包含: - 声纳服务器 - 声纳数据库 - th sonarqube 扫描仪
version: '3.7'
services:
# Sonarqube server : continuous code quality + security
# User = admin, password = admin
# The first time, we need to adjust docker parameters for sonarqube. Execute commands in the section 'Docker Host Requirements' from https://hub.docker.com/_/sonarqube/ : sudo sysctl -w vm.max_map_count=262144; sudo sysctl -w fs.file-max=65536; ulimit -n 65536; ulimit -u 4096; docker-compose -f docker-compose-sonarqube.yml up
sonarqube:
image: sonarqube:8.3-community
depends_on:
- sonarqube-db
ports:
- "54380:9000"
expose:
- "9000"
networks:
- sonarnet
environment:
SONAR_JDBC_URL: jdbc:postgresql://sonarqube-db:5432/sonar
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar
volumes:
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_logs:/opt/sonarqube/logs
- sonarqube_temp:/opt/sonarqube/temp
# Sonarqube database
sonarqube-db:
image: postgres
networks:
- sonarnet
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
volumes:
- postgresql:/var/lib/postgresql
# This needs explicit mapping due to https://github.com/docker-library/postgres/blob/4e48e3228a30763913ece952c611e5e9b95c8759/Dockerfile.template#L52
- postgresql_data:/var/lib/postgresql/data
# Sonarqube client (scanner)
sonarqube-scanner-cli:
image: sonarsource/sonar-scanner-cli
depends_on:
- sonarqube
networks:
- sonarnet
volumes:
- ./:/usr/src
environment:
SONAR_HOST_URL: http://sonarqube:9000
networks:
sonarnet:
driver: bridge
volumes:
sonarqube_data:
sonarqube_extensions:
sonarqube_logs:
sonarqube_temp:
postgresql:
postgresql_data:
在 sonar-project.properties 中设置您的项目来源:
# must be unique in a given SonarQube instance
sonar.projectKey=myapp
# --- optional properties ---
# defaults to project key
sonar.projectName=My App
# defaults to 'not provided'
#sonar.projectVersion=1.0
# Path is relative to the sonar-project.properties file. Defaults to .
sonar.sources=./symfony/src
# Encoding of the source code. Default is default system encoding
#sonar.sourceEncoding=UTF-8
# Sonarqube server url
sonar.host.url=http://sonarqube:9000
最后运行 sonarqube.sh
# Usage : sh sonarqube.sh firefox
sonarcube()
sonarqubePort=54380
sudo date # Ask for the password at the begining
docker-compose -f docker-compose-sonarqube.yml up --d
isServerUp=1
while [ "$isServerUp" != "0" ]; do # Wait for sonarcube server to be up
echo "Waiting for sonarqube. This may take 1 min ..."
curl http://localhost:$sonarqubePort -s|grep "window.serverStatus"|grep "UP"
isServerUp=$?
sleep 1
done
sleep 3
mkdir .sonar .sonar/cache .scannerwork
sudo chmod -R 777 .sonar
sudo chmod -R 777 .scannerwork
docker-compose -f docker-compose-sonarqube.yml start sonarqube-scanner-cli;
docker-compose -f docker-compose-sonarqube.yml logs -f sonarqube-scanner-cli;
firefox http://localhost:54380/dashboard?id=myapp
echo "View Sonarqube results at http://localhost:$sonarqubePort/dashboard?id=myapp"
sonarcube
【讨论】:
【参考方案3】:您是否使用-v "/path/to/project:/usr/src"
将任何内容安装到/usr/src?
【讨论】:
即使在没有任何参数的简单“Docker 运行 mysonarscanner”期间也会发生这种情况。用户内部的问题是否在 dockerfileach 中定义? 我不认为你可以在没有任何参数的情况下运行它。如果您查看文档,并且想要扫描当前目录,则必须通过-v "$PWD:/usr/src"
(对于 linux)。请参阅github.com/SonarSource/sonar-scanner-cli-docker 了解更多信息。以上是关于为啥 Sonar-scanner 4.2 无法创建用户缓存?的主要内容,如果未能解决你的问题,请参考以下文章
白盒测试之静态代码扫描:SonarQube+Scanner环境搭建及使用
白盒测试之静态代码扫描:SonarQube+Scanner环境搭建及使用
更新到 Android Studio 4.2 后无法创建新的 Kotlin 项目