Docker 安装 sonarQube 并在项目工使用sonar进行扫描
Posted 诺浅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker 安装 sonarQube 并在项目工使用sonar进行扫描相关的知识,希望对你有一定的参考价值。
1. 安装mysql
sonar扫描出来的缺陷等信息需要存入数据库,数据库选择可以有很多,我这里以mysql作为演示
1.1. 安装mysql
略,需要注意的是我这里安装的sonarQube的版本是7.4-community,mysql的版本不能低于5.6。
1.2 创建mysql sonar数据库用.户.
create database sonar;
CREATE USER 'sonar'@'%' IDENTIFIED BY 'sonar';
grant all on sonar.* to 'sonar'@'%';
flush privileges;
2. Docker安装sonarQube
2.1 拉取镜像
docker pull sonarqube:7.4-community
2.2 创建工作目录
mkdir -p /data/sonarqube
2.3 修改系统参数
echo "vm.max_map_count=262144" > /etc/sysctl.conf
sysctl -p
2.4 运行一个test容器
docker run -d --name sonartest sonarqube:7.4-community
2.5 将容器内重要文件复制到宿主机
docker cp sonartest:/opt/sonarqube/conf /data/sonarqube
docker cp sonartest:/opt/sonarqube/data /data/sonarqube
docker cp sonartest:/opt/sonarqube/logs /data/sonarqube
docker cp sonartest:/opt/sonarqube/extensions /data/sonarqube
2.6 删除这个test容器
docker rm -f sonartest
2.7 修改文件夹权限
chmod -R 777 /data/sonarqube/
2.8 创建容器并运行
docker run -d --name sonar -p 9090:9000 \\
-e ALLOW_EMPTY_PASSWORD=yes \\
-e SONARQUBE_DATABASE_USER=sonar \\
-e SONARQUBE_DATABASE_NAME=sonar \\
-e SONARQUBE_DATABASE_PASSWORD=sonar \\
-e SONARQUBE_JDBC_URL="jdbc:mysql://mysql:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false" \\
--net sonarqube-tier \\ --privileged=true \\
-v /data/sonarqube/logs:/opt/sonarqube/logs \\
-v /data/sonarqube/conf:/opt/sonarqube/conf \\
-v /data/sonarqube/data:/opt/sonarqube/data \\
-v /data/sonarqube/extensions:/opt/sonarqube/extensions\\
sonarqube:7.4-community
3. 使用sonar扫描代码
浏览器输入http://ip:9090,随便输入一个用户名用以生成token,选择自己的项目是gradle还是maven。好了后会有一个命令显示在页面上
mvn sonar:sonar -Dsonar.host.url=http://192.168.85.130:9090 -Dsonar.login=017f727c51f303c689ddb9ca9133b5c640ebb5fd
去项目的根目录或者在IDEA的终端中执行这个命令
到显示BUILD SUCCESS
说明已经扫描完成
浏览器输入http://ip:9090,账号:admin 密码:admin
4. 使用sonarQube
4.1 配置中文
新版本sonaqube可以去市场搜索中文语言包如下。
可以看到这个中文包的版本并不支持我们现在安装的sonaqube的版本,需要去github上下载中文包
中文语言包下载地址
将 jar 包放入 /data/sonarqube/extensions/plugins ,重启 sonarqube。再次访问就看到中文了.然后会在首页显示前面扫出来的项目缺陷有哪些
5. 单元测试覆盖率一直是0的解决办法
先确认下单元测试的代码目录是否正确,正确的目录如下,需要在test/java
下
如果目录没有问题尝试如下解决方案
在pom.xml中添加jacoco插件
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.8</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
添加测试支持包
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-runner</artifactId>
<version>1.5.1</version>
</dependency>
在测试代码的类上加注解
@RunWith(JUnitPlatform.class)
整个文件如下
@RunWith(JUnitPlatform.class)
public class TestMyHashSet
@Test
void contextLoads()
MyHashSet myHashSet = new MyHashSet();
myHashSet.add(1);
myHashSet.remove(1);
myHashSet.contains(1);
System.out.println("+++++"+myHashSet.contains(1));
再次执行扫描命令,就可以看到单侧有覆盖率了
以上是关于Docker 安装 sonarQube 并在项目工使用sonar进行扫描的主要内容,如果未能解决你的问题,请参考以下文章