由于公司没有多余的虚拟机给测试使用,为了节省资源又可以方便管理,我们使用docker 安装sonarqube
安装分为
sonar-web端(包括数据库),sonarclient插件端(maven端,sonar-scanner端)
整个扫描流程如下图:
1.首先确保你的docker是否安装,没有的话请安装docker,docker安装自行搜搜。
docker -v
2.拉取镜像,默认都是从 DockerHub 拉取:
拉取数据库镜像,新版不支持mysql数据库(从SonarQube 7.9开始,支持的数据库变为:Oracle、Microsoft SQL Server和PostgreSQL)。
docker pull postgres
拉去sonarqube 镜像,我拉取的镜像最新版是7.9.1
docker pull sonarqube:7.9.1-community
3.启动postgresql
docker run --name postgresqldb -e POSTGRES_USER=sonar -e POSTGRES_PASSWORD=sonar -d postgres
启动 sonarqube
docker run --name sq --link postgresqldb -e SONARQUBE_JDBC_URL=jdbc:postgresql://postgresqldb:5432/sonar -p 9000:9000 -d sonarqube:7.9.1-community
4.登录 打开 http://ip:9000/ , 点击 “Log in”,默认账号密码为admin,amdin
5. 汉化
sonarqube 有个应用市场,可以安装插件,比如汉化插件Chinese pack 。
登录账号后,在路径Administration→Marketplace→Plugins 下搜索,Chinese pack ,install后,会有让你restart,重启即可。
只适用于maven项目的java代码,扫描出来的准确性比使用sonar-scanner准一点。
maven 插件:
客户端所用到的docker镜像,自己可以找一个支持jdk8的就可以。可以参考maven dockerhub github上面的精简版Dockerfile创建镜像
maven Dockfile:
FROM openjdk:8-jdk-alpine
RUN apk add --no-cache curl tar bash procps
ARG MAVEN_VERSION=3.6.1
ARG USER_HOME_DIR="/root" ARG SHA=b4880fb7a3d81edd190a029440cdf17f308621af68475a4fe976296e71ff4a4b546dd6d8a58aaafba334d309cc11e638c52808a4b0e818fc0fd544226d952544
ARG BASE_URL=https://apache.osuosl.org/maven/maven-3/${MAVEN_VERSION}/binaries
RUN mkdir -p /usr/share/maven /usr/share/maven/ref \
&& curl -fsSL -o /tmp/apache-maven.tar.gz ${BASE_URL}/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
&& echo "${SHA} /tmp/apache-maven.tar.gz" | sha512sum -c - \
&& tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 \
&& rm -f /tmp/apache-maven.tar.gz \
&& ln -s /usr/share/maven/bin/mvn /usr/bin/mvn
ENV MAVEN_HOME /usr/share/maven
ENV MAVEN_CONFIG "$USER_HOME_DIR/.m2"
COPY mvn-entrypoint.sh /usr/local/bin/mvn-entrypoint.sh
COPY settings-docker.xml /usr/share/maven/ref/
ENTRYPOINT ["/usr/local/bin/mvn-entrypoint.sh"]
CMD ["mvn"]
修改maven settings.xml配置
①、在pluginGroups中增加sonar依赖:
org.sonarsource.scanner.maven
②、配置sonar地址 可以在profiles中指定sonar服务器地址:
sonar
true
http://localhost:9000
添加环境变量:
vim ~/.bashrc
export MAVEN_HOME=/usr/local/apache-maven-3.6.2
export PATH=${PATH}:${MAVEN_HOME}/bin
source ~/.bashrc
dockerfile编写后手动build一下生成docker 镜像(如果不会,请自行查找资料)
验证是否安装成功,在启动镜像后输入一下命令即可。
mvn -v
在docker里面
执行扫描:需要在你的代码有pom目录下执行。(注意,不加-Dsonar.java.binaries会报错)
mvn sonar:sonar -Dsonar.java.binaries=target/classes
也可以在执行过程中添加:
mvn sonar:sonar -Dsonar.host.url=http://192.168.2xx.xxx:30006
适用于大部分的代码,包括java,js,以及python等,我们项目一般扫描js代码,java项目由于都是maven项目,都使用maven插件扫描。
下载sonar-scanner软件版本
https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/
下载直接在解压包里修改sonar scanner配置文件,保存。
conf/sonar-scanner.properties。
根据数据库使用情况进行取消相关的注释即可,同时需要添加数据库用户名和密码信息,即配置要访问的sonar服务和数据库服务器地址(新版的sonar-scanner 似乎可以不用配数据库,待验证)
#----- Default SonarQube server
sonar.host.url=http://192.xxx.xxx.xxx:9000
#----- Default source code encoding
#sonar.sourceEncoding=UTF-8
sonar.jdbc.password=jdbc:postgresql://postgresqldb:5432/sonar
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar-scanner 的dockerfile文件内容:
FROM openjdk:8-jdk-alpine
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
RUN apk add nodejs
RUN apk add npm
ADD sonar-scanner-4.2.0.1873-linux.tar /usr/share/
ENV PATH="/usr/share/sonar-scanner-4.2.0.1873-linux/bin:${PATH}"
COPY sonar-project.properties /run/
CMD echo "$PATH"
扫描js项目demo:
创建sonar-project.properties文件,以js代码为例在工程根目录下新建立一个sonar-project.properties配置文件(后面不能有空格字符),projectName为你展示项目的名字。
sonar.projectKey=test
sonar.projectName=test
sonar.projectVersion=1.0
sonar.sources=./
sonar.language=js
sonar.sourceEncoding=UTF-8
扫描java项目demo:
需要在目录下创建target/sonar 目录,又不然会报错。
sonar.projectKey=test
sonar.projectName=test
sonar.projectVersion=1.0
sonar.sources=./
sonar.language=java
sonar.sourceEncoding=UTF-8
sonar.java.binaries=target/sonar
启动镜像后,直接使用:
sonar-scanner -v 即可验证是否安装
执行扫描:下载代码后,拷贝sonar-project.properties 到你的代码下执行以下命令:
sonar-scanner