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进行扫描的主要内容,如果未能解决你的问题,请参考以下文章

centos7案例实战——sonarQube安装及springboot项目集成sonarQube完成代码质量检查

12-Docker-部署SonarQube

如何为 Angular 7 项目设置 sonarqube

代码质量管理之SonarQube安装实践

OSX 上的 SonarQube Xamarin 分析

Jenkins-CI/CD-03-安装并配置 SonarQube