在这里插入图片描述

一、先安装postgresql数据库和jdk17版本
从 SonarQube 8.2 开始,官方不再支持 MySQL 数据库,因此这里使用postgresql数据库
数据库安装步骤
1.先在postgresql官方下载 https://www.postgresql.org/ftp/source/ 我用的13版本
在这里插入图片描述
把压缩文件上传到linux服务器的/usr/local/src目录解压 tar -zxvf postgresql-13.0.tar.gz

  1. 编译源码并安装
    创建postgres用户 : 启动数据库要用这个用户权限启动
useradd postgres

创建安装目录和启动日志文件

mkdir /usr/local/pgsql
chown  postgres  /usr/local/pgsql
mkdir /usr/local/pgsql/data
chown  postgres /usr/local/pgsql/data
touch /usr/local/pgsql/pgsql.log
chown postgres /usr/local/pgsql/pgsql.log

检测安装环境

这里需要注意,在编译前一定要安装C compiler(C语言编译器),如果没有安装,执行yum  install  -y  gcc* 安装即可
cd  /usr/local/src/postgresql-14.5
./configure --prefix=/usr/local/pgsql  --without-readline --without-zlib

编译源码并安装

这个过程需要一会儿,耐心等待。。。
make && make install
看到下图所示,表示编译安装完成。

初始化数据库

这里需要切换到postgres用户下执行下面命令(不支持root下运行)
su - postgres
cd /usr/local/pgsql/bin
./initdb -D /usr/local/pgsql/data

启动数据库服务

./pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/pgsql.log start
如下图所示启动成功

在这里插入图片描述

为了方便后面的操作postgres命令,我们切换到root用户下配置一下环境变量

su - root
echo 'export PGHOME=/usr/local/pgsql' >> /etc/profile
echo 'export PGDATA=$PGHOME/data' >> /etc/profile
echo 'export PATH=$PATH:$PGHOME/bin' >> /etc/profile
source /etc/profile

我们再次切换到postgres用户下,执行postgres的命令看看,是不是很方便了

查询postgres服务状态
pg_ctl status
启动postgres服务
pg_ctl start
重启postgres服务
pg_ctl restart
停止postgres服务
pg_ctl stop

3.登录PostgreSql

登录数据库不指定用户,默认是以postgres登录postgres数据库
psql

创建数据库用户
create user jamy password  '123456';     创建数据库用户jamy,密码为123456

创建数据库
create database test  owner  jamy;     //指定数据库所属者为jamy用户
create database sonarqube ; //必须创建这个数据库不然启动会报错

登录指定用户和数据库登录
psql -U jamy -W test

给数据库授权
grant all privileges on database test to jamy;

查看数据库列表
\l

切换数据库
\c      //切换到test数据库   \c test;

退出数据库用户
\q 或者 exit 或者quit

查看数据库用户权限列表
\du

  1. 客户端登录PostgreSql
    客户端登陆需要修改两个配置文件
cd /usr/local/pgsql/data
vim postgresql.conf
将listen_addresses = ‘localhost’ 改成  listen_addresses = '*'

vim  pg_hba.conf
在# IPv4 local connections:下面添加如下内容
host    all             all             0.0.0.0/0               password

然后重启postgres服务

pg_ctl restart

这时候客户端就可以连接这个数据库了
在这里插入图片描述

jdk17版本Linux安装这里就不写步骤了,网上很多(略),linux也需要安装一个maven,后续jacoco进行分析代码覆盖率要用到(略)

二、sonarqube在linux中安装部署

1.我安装的sonarqube版本是sonarqube-9.6.1.59531.zip,先去官网下载这个包,然后把这个包放在服务器目录中我这里是放在了/usr/local/src目录
下载链接 https://www.sonarsource.com/products/sonarqube/downloads/historical-downloads/
在这里插入图片描述

2.解压sonarqube-9.6.1.59531.zip

unzip sonarqube-9.6.1.59531.zip

创建文件夹

/var/sonarqube/data
/var/sonarqube/temp
chown -R sonar.sonar  /var/sonarqube/data
chown -R sonar.sonar  /var/sonarqube/temp

创建用户
这里SonarQube是一个java的web项目,依赖elasticsearch和postgres才能运行,因为elasticsearch不能使用root账户运行,所以现在创建用户

useradd sonar
passwd sonar

赋予权限

chown -R sonar.sonar /usr/local/src/sonarqube-9.6

编辑/usr/local/src/sonarqube-9.6/conf中的sonar.properties中添加如下内容

#sonar运行产生的数据文件和临时文件存放目录
sonar.path.data=/var/sonarqube/data
sonar.path.temp=/var/sonarqube/temp
#访问sonar的IP地址、端口号以及上下文,host就填你部署SonarQube的这台主机或者虚拟机的IP,端口随便定,不要和已有端口冲突就行
sonar.web.host=10.3xxxxxxx 这里是部署sonarqube的服务器地址
sonar.web.port=8888
sonar.web.context=/
#sonar运行需要连接的postgres参数
sonar.jdbc.username=jamy
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:postgresql://xxxxxx服务器地址:5432/sonarqube?currentSchema=public

紧接着设置系统参数vm.max_map_count

vim /etc/sysctl.conf
修改如下内容
vm.max_map_count=262144
查看修改的参数是否生效,如果生效显示如下
sysctl -p

这里就ok了,开始启动sonarqube了

先启动postgres数据库(这个数据库装在本机或是其他虚拟机都可以,只要能连接就行)上边已经启动过了,


等会启动sonar会连接数据的
然后切换到sonar用户下

su  sonar
来到sonarqube的bin目录下准备启动
cd /usr/local/src/sonarqube-9.6/bin/linux-x86-64
./sonar.sh start
查看启动日志,显示如下图表示启动成功
tail -f /usr/local/src/sonarqube-9.6/logs/sonar.log

使用SonarQube
先关闭防火墙再来访问

浏览器访问地址:xxxx服务器ip:8888
账户 :admin
密码: admin
首次登录后会要求你修改密码

如果想要中文显示界面,可以安装中文插件

在这里插入图片描述
继续往下拉,就可以看到这个按钮,点击它
在这里插入图片描述
安装完中文插件,重启SonarQube
我这里是在服务器中重启的

在这个目录下重启
/usr/local/src/sonarqube-9.6/bin/linux-x86-64
重启命令
./sonar.sh restart

三、部署sonar-scanner

sonarqube通过调用扫描器sonar-scanner 进行代码质量分析,即扫描器的具体工作就是扫描代码。
然后sonar-scanner 扫描完成后会把扫描结果也写入到数据库中,所以sonarqube是基于数据库读出结果,所以就可以查到扫描结果了

下载链接
https://docs.sonarsource.com/sonarqube/latest/analyzing-source-code/scanners/sonarscanner/

然后上传到服务器/usr/local/src/目录下解压

unzip sonar-scanner-cli-5.0.1.3006-linux.zip

编辑conf中sonar-scanner.properties文件内容

#----- Default SonarQube server
sonar.host.url=http://xxxxx服务器ip:8888端口自定义

#----- Default source code encoding
sonar.sourceEncoding=UTF-8

sonar-scanner 是不需要启动的,他是被调用的

四、部署jenkins

下载jenkins的war包

https://get.jenkins.io/war-stable/2.332.4/jenkins.war

将war包上传至服务器下面目录中

在/usr/local/src/创建目录jenkins

vim /etc/profile

export PATH

export JAVA_HOME=/usr/local/soft/jdk-17.0.8
#export CLASSPATH=$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
export PGHOME=/usr/local/pgsql13
export PGDATA=$PGHOME/data
export PATH=$PATH:$PGHOME/bin
export JAVA_HOME=/usr/local/src/jdk-17.0.10
export PATH=$PATH:$JAVA_HOME/bin
export SONARRUNNER_HOME=/usr/local/src/sonar-scanner-5.0.1.3006-linux
export PATH=$SONARRUNNER_HOME/bin:$PATH
#maven
export MAVEN_HOME=/usr/local/src/apache-maven-3.9.6
export PATH=$MAVEN_HOME/bin:$PATH
export MAVEN_HOME PATH
# jenkins
JENKINS_HOME=/usr/local/src/jenkins
export JENKINS_HOME

刷新资源

source /etc/profile

创建jenkins运行日志文件

mkdir/usr/local/src/jenkins/logs

创建jenkins启动脚本
touch jenkins.sh

脚本内容,我这是指定的8082端口启动

cd $JENKINS_HOME

nohup java -Dhudson.model.DownloadService.noSignatureCheck=true -Xmx2g -jar jenkins.war --httpPort=8082 > logs/jenkins.log 2>&1 &
tail -f logs/jenkins.log

启动jenkins

sh jenkins.sh

打开jenkins页面

浏览器输入:http://ip:8082

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
下载关于sonarqube和sonarqube scanner的插件和jacoco插件,email邮件插件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

sonarqube中可以先新建一个项目名称,在jenkins中要用到这个项目名称
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
五、jenkins和sonarqube建立连接

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

六、和gitlab建立连接

在这里插入图片描述
接下来在jenkins中新建项目,项目名尽量和sonarqube中的项目名称保持一致
在这里插入图片描述
这里填gitlab的凭证,git仓库地址要复制http开头的

在这里插入图片描述
配置sonarqube的扫描器
在这里插入图片描述
在这里插入图片描述

这里的test1是在sonarqube中新建好的项目名称

# project key 就是上面得到的,不能错
sonar.projectKey=test1
sonar.projectName=test1
sonar.projectVersion=1.0
sonar.language=java
sonar.sourceEncoding=UTF-8
sonar.sources=$WORKSPACE
sonar.java.binaries=$WORKSPACE
#测试类的字节码文件路径,不支持通配符
sonar.java.test.binaries=target/test-classes
sonar.junit.reportsPath=target/surefire-reports
# 代码覆盖率插件
sonar.java.coveragePlugin=jacoco
# jacoco插件版本
jacoco.version=0.8.7
# jacoco.exec文件路径
# sonic-server-controller项目的jacoco.exec文件路径
sonar.jacoco.reportPath=/usr/local/src/jenkins/workspace/airtest/sonic-server-controller/target/jacoco.exec
sonar.coverage.jacoco.xmlReportPaths=/usr/local/src/jenkins/workspace/airtest/sonic-server-controller/target/jacoco-ut/jacoco.xml

七、配置jenkins自动构建步骤
这里是当代码提交到gitlab上就会触发jenkins构建
首先在jenkins中配置
在这里插入图片描述
在这里插入图片描述

然后在gitlab上进行配置
在这里插入图片描述

在这里插入图片描述
或者点击测试后就会在jenkins中进行构建,然后有代码提交到gitlab后jenkins就会自动构建
在这里插入图片描述
八、构建后发送邮件
需要现在system中设置下,然后在构建编辑中再添加

system设置步骤
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

构建编辑中设置,构建后操作,需要添加2块
在这里插入图片描述
这里是发送邮件携带的附件,也就是代码扫描出来的报告pdf
在这里插入图片描述
sonarqube中这里需要配置下报告pdf的用户名密码也就是sonarqube的用户名密码
在这里插入图片描述
在这里插入图片描述

邮件内容

<h1><center><font>以下是Jenkins自动发送的邮件,请勿回复!</font><center></h1> <br> <hr> <br> 项目描述:${JOB_DESCRIPTION}<br> <br> <hr> 项目名称:$PROJECT_NAME<br> 构建编号:$BUILD_NUMBER<br> 构建状态:$BUILD_STATUS<br> 触发原因:${CAUSE}<br> 系统测试报告:<A HREF="http://xxxxxxcom/dashboard?id=${JOB_NAME}">点击跳转到sonarqube报告链接</a> <br> <hr>

在这里插入图片描述

九、jacoco集成测试单元测试覆盖率

先在jenkins中下载jacoco插件然后配置
增加构建步骤
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
要扫描的项目中的pom中还要加依赖

主pom加

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.7</version>
    <executions>
        <execution>
            <id>jacoco-initialize</id>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
        <!--这个report:对代码进行检测,然后生成index.html在target/jacoco-ut/index.html中可以查看检测的详细结果-->
        <execution>
            <id>jacoco-site</id>
            <phase>test</phase>
            <!--<phase>package</phase>写上test的时候会自动出现jacoco-ut文件夹,而不需执行下面的jacoco:report步骤,推荐-->
            <goals>
                <goal>report</goal>
            </goals>
            <configuration>
                <dataFile>target/jacoco.exec</dataFile>
                <outputDirectory>target/jacoco-ut</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.21.0</version>
    <configuration>
        <useSystemClassLoader>false</useSystemClassLoader>
        <forkMode>once</forkMode>
        <reuseForks>true</reuseForks>
        <testFailureIgnore>true</testFailureIgnore>
    </configuration>
</plugin>
<plugin>
    <groupId>org.sonarsource.scanner.maven</groupId>
    <artifactId>sonar-maven-plugin</artifactId>
    <version>3.8.0.2131</version>
</plugin>

子pom中

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.21.0</version>
    <configuration>
        <useSystemClassLoader>false</useSystemClassLoader>
        <forkMode>once</forkMode>
        <reuseForks>true</reuseForks>
        <testFailureIgnore>true</testFailureIgnore>
    </configuration>
</plugin>
<!-- 添加 SonarQube 插件 -->
<plugin>
    <groupId>org.sonarsource.scanner.maven</groupId>
    <artifactId>sonar-maven-plugin</artifactId>
    <version>3.8.0.2131</version>
</plugin>

这里记得也要改
在这里插入图片描述
在jenkins中点击执行即可

要是需要扫描多个gitlab项目,你没有权限访问的项目,可以让有权限的人在gitlab上新建一个令牌,然后把这个令牌配置在jenkins中也是可以拉取代码的
在这里插入图片描述
在这里插入图片描述

Logo

更多推荐