持续代码审查平台搭建(Sonarqube+Jenkins+Gitlab)

本文详细介绍如何使用SonarQube、Jenkins及GitLab搭建一套完整的代码审查与持续集成环境,涵盖各组件的安装配置及集成步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

前言

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

<think>好的,我现在需要回答用户关于如何搭建项目测试环境的问题,包括配置流程、工具选择和最佳实践。首先,我需要回顾用户提供的引用内容,看看哪些信息可以利用。 用户提到的引用[1]中提到了Jest的配置,比如testEnvironment设置为jsdom,以及setupFilesAfterEnv用于全局脚本。引用[2]讨论了Maven与其他工具的集成,比如IDE和CI/CD工具。引用[3]提到Spring Boot的自动配置和第三方库集成。这些内容可能对测试环境搭建有帮助。 接下来,我应该分步骤组织回答。首先是工具选择,可能需要推荐测试框架、模拟库、覆盖率工具等。然后配置流程,分步骤说明如何设置环境。最后是集成与最佳实践,比如结合CI/CD、代码审查等。 在工具选择部分,可以推荐Jest、JUnit、Pytest等测试框架,以及Cypress、Selenium用于端到端测试。覆盖率工具如Istanbul、JaCoCo。环境工具如Docker,CI/CD如Jenkins、GitHub Actions。这些工具需要结合用户提到的引用内容,比如Jest的配置示例。 配置流程需要分环境准备、框架配置、测试编写、环境隔离、覆盖率设置、持续集成等步骤。比如,在框架配置中,引用[1]的testEnvironment设置jsdom,setupFilesAfterEnv的用法,可以举例说明。环境隔离部分可以用Docker,引用[3]提到的Spring Boot可能涉及嵌入式服务器,可以提到。 最佳实践部分需要强调自动化测试、分层测试、覆盖率阈值(引用[1]中的coverageThreshold)、环境一致性、监控和文档。比如设置覆盖率阈值确保测试充分性,引用[1]中的示例。工具集成方面,引用[2]提到Maven与IDE、CI/CD的集成,可以建议在Jenkins中配置Maven命令。 需要确保回答结构清晰,每个部分有条理,并且自然地引用提供的文献。同时,生成相关问题时要考虑用户可能进一步询问的内容,比如具体工具的配置步骤或如何选择测试框架。</think>### 如何搭建项目的测试环境 #### 一、工具选择 1. **测试框架** - 单元测试:推荐使用 $Jest$(JavaScript)、$JUnit$(Java)、$Pytest$(Python)等,支持断言和测试覆盖率分析[^1]。 - 端到端测试:$Cypress$(Web应用)、$Selenium$(跨平台)适合模拟用户操作。 2. **代码覆盖率工具** $Istanbul$(JavaScript)、$JaCoCo$(Java)与测试框架集成,生成覆盖率报告。 3. **环境隔离工具** 使用 $Docker$ 创建容器化环境,确保测试环境与生产环境一致。 4. **持续集成(CI)工具** $Jenkins$、$GitHub Actions$ 或 $GitLab CI/CD$ 实现自动化构建和测试[^2]。 --- #### 二、配置流程 1. **环境准备** - 安装项目依赖(如 Node.js、JDK、Python)。 - 初始化包管理器(如 $npm init$、$mvn archetype:generate$)。 2. **测试框架配置** - 以 $Jest$ 为例,在 `jest.config.js` 中设置: ```javascript module.exports = { testEnvironment: 'jsdom', // 模拟浏览器环境 setupFilesAfterEnv: ['<rootDir>/jest.setup.js'], // 全局脚本 coverageThreshold: { branches: 80, functions: 80 } // 覆盖率阈值 }; ``` 3. **编写测试用例** - 分层设计:单元测试(函数级)、集成测试(模块交互)、端到端测试(全流程)。 4. **环境隔离与依赖管理** - 使用 $Docker$ 定义测试环境镜像: ```dockerfile FROM node:18 WORKDIR /app COPY package*.json ./ RUN npm install COPY . . CMD ["npm", "test"] ``` 5. **集成覆盖率报告** - 在 $Maven$ 中配置 $JaCoCo$: ```xml <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.8</version> <executions>...</executions> </plugin> ``` 6. **持续集成配置** - 在 $Jenkins$ 中创建流水线任务,调用 $mvn test$ 或 $npm test$。 --- #### 三、最佳实践 1. **自动化测试** 将测试脚本集成到构建流程,确保每次代码提交触发测试[^3]。 2. **分层测试策略** - 单元测试覆盖核心逻辑(70%+),集成测试验证模块协作,端到端测试保障用户体验。 3. **覆盖率阈值管理** 设置合理的阈值(如 $branches: 80\%$),避免无效测试代码。 4. **环境一致性** 使用 $Docker$ 或 $Vagrant$ 统一开发、测试和生产环境。 5. **监控与日志** 集成 $Prometheus$ 监控测试性能,记录失败用例的详细日志。 6. **工具集成优化** - IDE 集成:在 $IntelliJ IDEA$ 中配置 $Maven$ 命令一键运行测试。 - 代码审查:结合 $SonarQube$ 分析测试覆盖率与代码质量。 --- ###
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值