目录

前言

一、安装SonarQube

1.1 安装Java SDK

1.2 安装和配置MySQL

1.3 下载Sonarqube

1.4 配置Sonarqube

1.5 启动Sonarqube

二、安装GitLab

2.1 安装相关依赖文件

2.2 下载GitLab

2.3 安装GitLab

2.4 启动GitLab

三、安装Jenkins

3.1 下载Jenkins

3.2 启动Jenkins

四、Jenkins与Sonarqube集成

4.1 Sonarqube上安装插件

4.2 Sonarqube上C++质量配置

4.3 Sonarqube上创建令牌

4.4 Jenkins上安装插件

4.5 Jenkins上配置Sonarqube的访问凭据

4.6 Jenkins上配置 “SonarQube servers”

4.7 Jenkins上配置 “SonarQube Scanner”

五、Jenkins与GitLab集成

5.1  GitLab配置允许外发请求

5.2  GitLab上创建访问令牌

5.3 Jenkins上配置GitLab凭据

5.4 Jenkins授权并创建GitLab的连接

5.5 Jenkins上创建任务

5.6 Jenkins上配置“General”

5.7 Jenkins上配置“构建触发器”

5.8 GitLab上创建Webhook

六、 联合测试

6.1 GitLab上提交变更

6.2 Jenkins上查看构建记录

6.3 SonarQube上查看代码分析报告

   总结


前言

       代码审查可以尽早发现 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个周末,期间熬夜到凌晨才收工,艰辛和喜悦不言而喻。这些工具并非完美,不能解决开发过程中的所有问题,代码审查也需要一个好的规则或制度来协调多方参与者的利益,只有这样,代码审查才能更顺畅、有效地实施。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐