持续代码审查平台搭建(Sonarqube+Jenkins+Gitlab)
目录前言一、安装SonarQube1.1 安装Java SDK1.2 安装和配置MySQL1.3 下载Sonarqube1.4 配置Sonarqube1.5 启动Sonarqube二、安装GitLab2.1 安装相关依赖文件2.2 下载GitLab2.3 安装GitLab 2.4 启动GitLab三、安装Jenkins3.1 下载Jenkins3.2 启动Jenkins四、Jenkins与Sona
目录
4.6 Jenkins上配置 “SonarQube servers”
4.7 Jenkins上配置 “SonarQube Scanner”
前言
代码审查可以尽早发现 Bug 和设计中存在的问题,问题发现得越晚,修复的代价越大。代码审查把问题的发现尽量提前,减少项目维护成本和提高工作效能。
代码审查分为人工审查和机器审查,本篇主要讲解机器审查的平台搭建,集成三个开源工具Sonarqube+Jenkins+Gitlab来实现静态代码审查。
本次搭建的软硬件环境环境如下:
主机环境:Ubuntu 18.04.4 LTS
开发工具:Sonarqube-7.6
Jenkins-2.346.1
Gitlab-14.1.3
Java JDK:1.8.0_192
MySQL数据库:5.7.38
一、安装SonarQube
1.1 安装Java SDK
下载Java JDK1.8,并查看JDK版本。
# Download openjdk-8-jdk
sudo apt install openjdk-8-jdk
# Ensure that specific Java (v1.8) is the default runtime
sudo update-alternatives --config java
# View JDK version
java -version
编辑/etc/profile,配置环境变量。
export JAVA_HOME=/usr/lib/jdk/jdk1.8.0_192
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:{JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
更新/etc/procfile
sudo source /etc/profile
1.2 安装和配置MySQL
MySQL5.7数据库的具体安装方法,可参考Ubuntu18.04下安装MySQL(图文教程)。
MySQL数据库配置如下:
# Log in to MySQL
mysql -u root -p
# Create databases and users and authorize
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'sonar' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
FLUSH PRIVILEGES;
1.3 下载Sonarqube
sonarqube下载地址:https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.6.zip
1.4 配置Sonarqube
1、解压文件
下载sonarqube-7.6,将其解压放到目录/opt下并重命名。
# Unzip the file to the /opt directory
unzip sonarqube-7.6.zip -d /opt
# Rename folder
mv sonarqube-7.6 sonarqube
2、数据库连接配置
编辑文件“/opt/sonarqube/conf/sonar.properties”,如下:
# Configure database user name, password, and URL
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
3、 创建ubuntu用户
# Create user group
groupadd sonar
# Create user
useradd sonar -g sonar -p sonar
# Authorization program directory
chown -R sonar.sonar/opt/sonarqube
1.5 启动Sonarqube
# Enter directory
cd /opt/sonarqube/bin/linux-x86-64/
# Start the sonarqube service
sh sonar.sh start
# Restart the sonarqube service
sh sonar.sh restart
# View running status
sh sornar.sh status
浏览器中输入:http://localhost:9000,进入sonarqube主页,如下:
二、安装GitLab
2.1 安装相关依赖文件
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates
2.2 下载GitLab
下载gitlab-ce_14.1.3-ce.0_amd64.deb安装包。
https://packages.gitlab.com/gitlab/gitlab-ce/packages/ubuntu/bionic/gitlab-ce_14.1.3-ce.0_amd64.deb
2.3 安装GitLab
dpkg -i gitlab-ce_14.1.3-ce.0_amd64.deb
2.4 启动GitLab
浏览器中输入:http://localhost:80,进入gitlab主页,如下:
三、安装Jenkins
3.1 下载Jenkins
jenkins官方下载地址:https://www.jenkins.io/download/
选择“Download Jenkins 2.346.1 LTS for",下载”jenkins.war”文件到本地。
3.2 启动Jenkins
# Specify port 8888 and start the service in the background
nohup java -jar /usr/local/jenkins.war --httpPort=8888 &
浏览器中输入:http://localhost:8888,进入jenkins主页,如下:
四、Jenkins与Sonarqube集成
4.1 Sonarqube上安装插件
在github上找到c/cpp源码检索插件(sonar-c-plugin-1.3.0.1746和sonar-cxx-plugin-1.3.0.1746),放到目录“/opt/sonarqube/extensions/plugins/”,重启SonarQube即可,如图:
4.2 Sonarqube上C++质量配置
进入Sonarqube主界面,依次【质量配置】>【创建】,创建一个新配置,并配置【更多激活规则】> 【批量修改】> 【活动c++】> 【应用】,如下图:
4.3 Sonarqube上创建令牌
进入Sonarqube主界面,依次【我的账号】>【安全】>【令牌】,并继续操作:
1、输入令牌1名称,“sonarqube_token_1”,生成令牌;
2、复制令牌“b0d58bc3ed8689b70b3c80a2c758dacbabad3dfb”,以备用;
4.4 Jenkins上安装插件
进入Jenkins主界面,依次【Dashboard】 > 【系统管理】 > 【插件管理】,并继续操作:
1、在“可选插件”标签中,输入“SonarQube Scanner for Jenkins”,并进行安装;
2、在”已安装“标签中查看“SonarQube Scanner for Jenkins”;
4.5 Jenkins上配置Sonarqube的访问凭据
进入Jenkins主界面,依次【Dashboard】 > 【系统管理】 > 【manage Credentials】> 【添加凭据】>【New credentials】,并继续操作:
1、选择“Select text”;
2、“Select”中粘贴sonarqube令牌“b0d58bc3ed8689b70b3c80a2c758dacbabad3dfb”;
3、输入“描述”,并创建凭据;
4.6 Jenkins上配置 “SonarQube servers”
进入Jenkins主界面,依次【Dashboard】 > 【系统管理】 > 【系统配置】>【SonarQube servers】,并继续操作:
1、选中“Environment variables";
2、输入“Name”、“Server URL”和选中已创建的“erver authentication token”,并保存;
4.7 Jenkins上配置 “SonarQube Scanner”
下载sonar-scanner-2.8,并解压到“/opt/sonar-scanner/”目录,操作如下:
unzip sonar-scanner-2.8.zip -d /opt/sonar-scanner/
进入Jenkins主界面,依次【Dashboard】 -> 【系统管理】 -> 【全局工具配置】>【SonarQube Scanner】,并继续操作:
1、取消“自动安装”;
2、录入扫描器名称“sonarqube-scanner”;
3、录入“SONAR_RUNNER_HOME”,并保存;
五、Jenkins与GitLab集成
5.1 GitLab配置允许外发请求
进入GitLab主界面,依次【Preferences】 > 【Admin】> 【设置】> 【网络】> 【外发请求】,并继续操作:
1、勾选“允许Webhook和服务对本地网络的请求 ”
2、勾选“允许系统钩子向本地网络发送的请求 ”
5.2 GitLab上创建访问令牌
进入GitLab主界面,依次【Preferences】 > 【访问令牌】> 【添加一个个人访问令牌】,并继续操作:
1、输入“Token name”;
2、勾选Select scopes 下的全部项目;
3、创建个人访问令牌;
4、复制令牌,以备用;
5.3 Jenkins上配置GitLab凭据
1、进入Jenkins主界面,依次【Dashboard】->【系统管理】—>【插件管理】—>【已安装】,如果没有则进行安装Git和GitLab插件;
2、进入Jenkins主界面,依次【系统管理】 —> 【manage Credentials】—> 【添加凭据】
->【New credentials】,选择“Gitlab API token”,录入GitLab令牌“1VRCz_M2kHHmdCct7WWZ”并创建凭据;
5.4 Jenkins授权并创建GitLab的连接
进入Jenkins主界面,依次【Dashboard】->【系统管理】—> 【系统配置】—> 【Gitlab】,并继续操作:
1、启用“Enable authentication for '/project' end-point”;
2、录入“Connection name”、“Gitlab host URL”和“Credentials”中选择已经创建的凭据;
3、测试连接,成功后,保存;
5.5 Jenkins上创建任务
进入Jenkins主界面,依次【Dashboard】->【新建任务】,并继续操作:
1、输入一个任务名称“hello";
2、选择“创建一个自由风格的软件项目”,并确定;
5.6 Jenkins上配置“General”
进入Jenkins主界面,依次【Dashboard】->【hello任务】 >【配置】>【General】> 【构建】,如图配置:
1、配置“执行shell”;
2、配置“Execute SonarQube Scanner”;
备注:本章不介绍SonarQube与GitLab的集成,配置“执行shell”目的是从GitLab拉取源码到jenkins的任务目录下,并执行sonar-scanner-2.8来进行代码分析。
5.7 Jenkins上配置“构建触发器”
进入Jenkins主界面,依次【Dashboard】->【hello任务】 >【配置】>【构建触发器】,如图配置:
5.8 GitLab上创建Webhook
进入GitLab主界面,新建一个项目“hello”,在“hello”项目下,依次【设置】->【Webhooks】,并继续操作:
1、录入网址“http://localhost:8888/job/hello/”;
2、粘贴Jenkins构建触发器下“Build when a change is pushed to GitLab. GitLab webhook URL: http://localhost:8888/project/hello”的“Secret token”;
3、选择“触发来源”和“启用SSL验证”,并保存;
4、选择“测试”下的“Push events”下拉项,测试事件推送是否成功;
六、 联合测试
6.1 GitLab上提交变更
在GitLab上提交一个demo(制作几点BUG,方便后续sonarqube生成报表 ),内容如下:
#include <stdio.h>
int main(void)
{
int a;
int b;
char *p = new char();
char *q;
p = q;
printf("hello, world!\n");
return0
}
源码提交后,将触发GitLab上的网络勾子,Jenkins将立即执行“hello”任务的构建,执行“shell”和“SonarQube Scanner”,生成报告。
6.2 Jenkins上查看构建记录
进入Jenkins主界面,在“hello”项目下,将看到构建记录,如下;
6.3 SonarQube上查看代码分析报告
进入Jenkins主界面,在“hello”项目下,进入【SonarQube】应用,将看到关于hello项目的分析报告,如下图:
总结
学习和搭建代码审查平台整整耗时2个周末,期间熬夜到凌晨才收工,艰辛和喜悦不言而喻。这些工具并非完美,不能解决开发过程中的所有问题,代码审查也需要一个好的规则或制度来协调多方参与者的利益,只有这样,代码审查才能更顺畅、有效地实施。
更多推荐
所有评论(0)