linux中部署jenkins+sonarqube+sonarqube扫描器+jacoco详细步骤!!!!!!万字 详细版,赶紧码住
1.我安装的sonarqube版本是sonarqube-9.6.1.59531.zip,先去官网下载这个包,然后把这个包放在服务器目录中我这里是放在了/usr/local/src目录。然后sonar-scanner 扫描完成后会把扫描结果也写入到数据库中,所以sonarqube是基于数据库读出结果,所以就可以查到扫描结果了。编辑/usr/local/src/sonarqube-9.6/conf中的
一、先安装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
- 编译源码并安装
创建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
- 客户端登录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中也是可以拉取代码的
更多推荐
所有评论(0)