新乡房产网:SonarQube搭建手记

2020-08-14 47 views 1

扫一扫用手机浏览

条件

这篇文章纪录的是SonarQube服务搭建的详细历程,应用于云迁徙后的PipleLine的代码扫描环节。

笔者有软件版本升级强迫症,一样平常喜欢使用软件的最新版本,编写此文的时刻(2020-05-17SonarQube的最新版本为8.3.1

SonarQube简介

SonarQube是一个代码质量治理开放平台,它集成了数千种自动的静态代码剖析规则,旨在提高开发人员的代码质量和平安性,使得开发人员编写加倍清洁,加倍平安的代码。主要提供了三个对照大的功效:

  • 代码可靠性支持:提前捕捉和提醒代码中的错误,从而制止未定义的行为影响到终端用户。
  • 应用平安支持:修复可能危害到应用程序的破绽,并通过平安热门学习AppSec(简朴明白就是会学习和识别新的破绽)。
  • 手艺债务支持:确保治理的代码库清洁而且可维护,以便提高开发人员的开发效率。

现在SonarQube支持27种编程语言,基本上笼罩了当前主流的编程语言编写的项目:

上面谈到的功效可能对照泛,实际上,研发团队可以基于SonarQube做下面的事情:

  • CI/CD流程加入一个SonarQube扫描的环节。
  • 实行代码质量阈值,只有通过了这个质量阈值检测才气进入下一个流程。
  • 代码质量低于阈值的项目要实时调整对应的代码。

质量阈值可以举行自定义,SonarQube中针对每个项目会有详细的面板信息,内里会给出项目当前的康健状态,差别级别破绽的分类和明细,破绽对应提交者等多维度的统计信息,利便举行问题的追踪和修复。举个例子,笔者在上一家公司项目上线需要跑一个流水线,而SonarQube设定了差别品级的阈值,对于老项目,会使用最低品级的阈值:阻断性的错误数目要求为0,对于一些新的项目,则严格要求质量如严重性的错误要求为0等,只要无法通过质量阈值检查,那么项目是无法上线的。

SonarQube安装

一样平常情况下,只需要安装社区版免费的SonarQube服务即可,可以基于二进制文件安装或者直接使用Docker下载镜像启动,二进制文件安装的历程对照复杂,由于SonarQube内部依赖内置的ElasticSearch做搜索,在Linux系统中需要添加一个非root用户,而且修改一些列的系统参数例如系统支持的最大可打开的文件数等等。此外,SonarQube是一个Java应用,需要内陆安装JDKSonarQube7.9版本最先放弃支持MySQL数据库8.3.1版本下只支持内存模式、PostgreSQLMicrosoft SQL ServerOracle四种存储引擎。笔者调研过,持久化模式下,三种数据库中PostgreSQL的安装相对简捷。下面会详细纪录基于二进制文件安装SonarQube服务的历程。

软件(系统) 版本
CentOS 7.x
OpenJDK 11.x
PostgreSQL 12.x
SonarQube 8.3.1

笔者在测试的虚拟机(局域网IP192.168.56.200)上关闭了防火墙,若是防火墙开启需要开放对应的端口号。

安装JDK11

OpenJDK的安装对照简朴:

mdkir /data/openjdk
cd /data/openjdk
wget https://download.java.net/openjdk/jdk11/ri/openjdk-11+28_linux-x64_bin.tar.gz
## 默认会解压到/data/openjdk/jdk-11文件夹
tar -zxvf openjdk-11+28_linux-x64_bin.tar.gz

若是系统中没有默认的JDK,可以添加到/etc/profile中:

vim /etc/profile

## /etc/profile文件中添加下面的内容
export JAVA_HOME=/data/openjdk/jdk-11
export PATH=$JAVA_HOME/bin:$PATH

## 刷新环境变量
source /etc/profile

测试一下:

[root@localhost jdk-11]# java -version
openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)

安装PostgreSQL数据库

PostgreSQL的安装也相对简朴,官方文档有十分详细的步骤:

yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install -y postgresql12
yum install -y postgresql12-server
/usr/pgsql-12/bin/postgresql-12-setup initdb
systemctl enable postgresql-12
systemctl start postgresql-12

修改/var/lib/pgsql/12/data/pg_hba.conf设置,开放所有Host的接见:

新乡房产网:SonarQube搭建手记 第1张

接着重启PostgreSQL

systemctl restart postgresql-12

切换用户进入PostgreSQL的下令行,而且添加一个新的数据库用户sonar和新的数据库sonar备用:

su postgres
psql -U postgres
CREATE USER sonar WITH PASSWORD 'sonar';
CREATE DATABASE sonar WITH OWNER sonar ENCODING 'UTF8'

新乡房产网:SonarQube搭建手记 第2张

这样就建立了一个名称为sonar,用户名为sonar而且密码也是sonar的数据库。

安装SonarQube服务

在安装SonarQube服务之前,可以参考Prerequisites and Overview调整系统参数,这些参数实在大部门和ElasticSearch有关,查看参数:

## 一个历程可以拥有的VMA(虚拟内存区域)的数目上限
sysctl vm.max_map_count
## 同时打开的文件数目上限 
sysctl fs.file-max
## 可以打开的文件描述符的上限
ulimit -n
## 可以启动线程的数目上限
ulimit -u

若是当前的会话是root用户,可以直接通过下面的下令去修改这四个参数:

sysctl -w vm.max_map_count=262144
sysctl -w fs.file-max=65536
ulimit -n 65536
ulimit -u 4096

否则需要手动修改/etc/security/limits.conf文件,在文件尾部添加:

* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096

修改/etc/sysctl.conf文件,在文件尾部添加:

vm.max_map_count=262144
fs.file-max=65536

/etc/security/limits.conf/etc/sysctl.conf更新完毕后必须重启服务器

接着新增一个用户sonarqube(基本原因是ElasticSearch不能用root用户启动):

adduser sonarqube
# 这一步需要输入密码,这里密码也暂定sonarqube
passwd sonarqube
# 分配权限
chown -R sonarqube:sonarqube /data/sonarqube

接着下载和安装SonarQube

新乡房产网:SonarQube搭建手记 第3张

mdkir /data/sonarqube
cd /data/sonarqube
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-8.3.1.34397.zip
uzip sonarqube-8.3.1.34397.zip

修改设置/data/sonarqube/sonarqube-8.3.1.34397/conf/sonar.properties添加下面的属性:

sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonar

完成所有设置之后,可以实验控制台启动SonarQube服务:

cd /data/sonarqube/sonarqube-8.3.1.34397/bin/linux-x86-64
./sonar.sh console

若是启动正常,日志如下:

新乡房产网:SonarQube搭建手记 第4张

然后Ctrl C退出控制台,使用./sonar.sh start后台启动SonarQube服务即可。

这里归类一下可能会遇到的问题:

  • 提醒root用户不能启动的问题,是由于ElasticSearch不允许使用root用户启动,新建一个普通用户即可。
  • 提醒部门文件夹无接见权限,一样平常是由于新建的普通用户没有分配SonarQube所在目录的写权限。
  • 提醒文件描述符或者线程数目限制,一样平常是由于没有修改vm.max_map_countfs.file-maxulimit -nulimit -u参数导致。

SonarQube使用

SonarQube治理员的初始化账号密码都为admin,若是需要修改密码或者分配差别权限的用户,可以在治理员的菜单栏中完成。

接见http://192.168.56.200:9000进入SonarQubeWebUI,可以先到插件市场安装一个汉化插件Chinese Pack,安装插件完成后重启服务即可实现汉化。

新乡房产网:SonarQube搭建手记 第5张

SonarQube提供差别类型的SonarScanner用于代码扫描和效果提交,这里以Maven为例。Mavensettings.xml需要引入下面的设置(注重父标签已经存在,重复添加父标签会导致异常):

<settings>
    <pluginGroups>
        <pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
    </pluginGroups>
    <profiles>
        <profile>
            <id>sonar</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <!-- Optional URL to server. Default value is http://localhost:9000 -->
                <sonar.host.url>
                  <!-- 这个位置需要替换成SonarQube服务地址,例如http://192.168.56.200:9000 -->
                  http://myserver:9000
                </sonar.host.url>
            </properties>
        </profile>
     </profiles>
</settings>

需要被扫描的项目中,需要引入Maven插件sonar-maven-plugin,当前最新版本为:

<plugin>
    <groupId>org.sonarsource.scanner.maven</groupId>
    <artifactId>sonar-maven-plugin</artifactId>
    <version>3.7.0.1746</version>
</plugin>

完成设置后,只需要在项目中执行下令举行扫描即可,首次执行会对照缓慢,由于需要下载大量的规则库和插件:

# 不指定插件版本执行
mvn clean install
mvn sonar:sonar

# 或者指定插件版本执行
mvn org.sonarsource.scanner.maven:sonar-maven-plugin:${插件的版本号}:sonar

此外,可以通过pom文件中的<properties>指定SonarQube的参数,如:

<properties>
   <sonar.host.url>[...]</sonar.host.url>
   <ssonar.projectKey>[...]</sonar.projectKey>
   <sonar.projectName>[...]</sonar.projectName>
   <sonar.projectVersion>[...]</sonar.projectVersion>
   <sonar.login>[...]</sonar.login>
   <sonar.password>[...]</sonar.password>
   <sonar.sourceEncoding>[...]</sonar.sourceEncoding>
   ......
</properties>

项目扫描效果提交后,可以在http://192.168.56.200:9000/projects看到项目列表:

新乡房产网:SonarQube搭建手记 第6张

点击进去就可以看到项目扫描后的详细讲述和统计:

新乡房产网:SonarQube搭建手记 第7张

小结

质量治理是DevOps中的一个重要环节,SonarQube是一个十分优异的代码质量治理开放平台,笔者之前迁徙服务到某云,云上的流水线设置可以通过插件形式引入SonarQube服务,这一点起到了低成本高收益的效果。

参考资料:

  • SonarQube官方文档
  • PostgreSQL - Linux downloads (Red Hat family)

小我私家博客

  • Throwable's Blog

(本文完 c-1-d e-a-20200517)

,

诚信娱乐

诚信娱乐(现:阳光在线官网)现已开放诚信在线手机版、诚信在线电脑客户端下载。诚信在线娱乐游戏公平、公开、公正,用实力赢取信誉。

Allbet欧博官网内容转载自互联网,如有侵权,联系Allbet欧博官网删除。

本文链接地址:http://www.zzxslszjx.com/post/1136.html

相关文章

发表评论

  • Allbet Gmaing官网欢迎进入Allbet Gmaing官网(www.aLLbetgame.us):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。真的值啊

    2020-08-14 00:04:35 回复该评论