使用 Jenkins、SonarQube 和 Gitee 搭建 CI/CD 环境

前言

本文将介绍如何使用 Jenkins、SonarQube 和 Gitee 搭建 CI/CD 环境

  • Jenkins是一款开源的自动化持续集成工具,主要用于自动化构建、测试和部署软件项目
  • SonarQube是一款开源的代码质量管理平台,可以帮助开发团队在开发过程中监控和管理代码质量。它支持多种编程语言,包括Java、C#、C++、Python等

我的思路是,前端提交代码到 Gitee,通过 Web Hook,触发 Jenkins 的任务,再拉起 SonarQube 代码检查,检查通过,进行前端项目的打包和部署

服务器配置

手中正好有两台腾讯云的服务器

SonarQube 最好安装在具有 3GB 以上内存的服务器上。我使用的服务器配置如下:

  • 2核4G CVM
  • 1核2G Lighthouse

安装过程

安装宝塔面板

出于方便运维的考虑,我给两台服务器安装上了宝塔

建议可以安装Docker管理器Nginx这个两个应用

安装 Jenkins

由于 Jenkins 部署所需的内存较小,可以直接选用 Lighthouse 来部署

如果服务器内存较小,可以通过以下命令限制 Docker 的最大运行内存为 1024MB
因为 Jenkins 也是部署在容器,如果要利用 Jenkins 再部署业务容器,需要设置 --privileged \ -u root \ -v /var/run/docker.sock:/var/run/docker.sock \

javascript 复制代码
docker run \
  --privileged \
  -u root \
  -dit \
  --name jenkins \
  -p 8080:8080 \
  -p 50000:50000 \
  -v /var/jenkins-data:/var/jenkins_home \
  -v /usr/bin/docker:/usr/bin/docker \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -m 1024m \
  jenkins/jenkins:latest

安装 Jenkins 没有什么意外,按照提示一步一步走就好了

配置 Jenkins

  1. 访问 Jenkins 控制台:在浏览器中输入 http://<your_server_ip>:8080

  2. 解锁 Jenkins:在 Jenkins 的安装日志中,可以看到初始密码,然后输入到控制台。

  1. 安装插件:选择 "Install suggested plugins",等待插件安装完成。

  2. 创建管理员用户:按照提示创建一个管理员用户并设置密码。

  3. 配置 Jenkins URL:确认 Jenkins URL,然后点击 "Save and Finish"。

  4. 完成 Jenkins 安装:点击 "Start using Jenkins"。

安装完 Jenkins 之后,你可以安装 汉化插件 和 Node,这里就不详细说了,网上有很多案例

安装 SonarQube

由于这款软件对内存有要求,这里使用 2核4G CVM 来部署

  1. 首先安装 PostgreSQL 数据库,然后安装 SonarQube:
bash 复制代码
# 安装 PostgreSQL
docker run --name db -e POSTGRES_USER=sonar -e POSTGRES_PASSWORD=sonar -v /data/docker/postgres/postgresql:/var/lib/postgresql -v /data/docker/postgres/data:/var/lib/postgresql/data -d postgres

# 安装 SonarQube
docker run --name sonarqube --link db -e SONARQUBE_JDBC_URL=jdbc:postgresql://db:5432/sonar -e SONARQUBE_JDBC_USERNAME=sonar -e SONARQUBE_JDBC_PASSWORD=sonar -v /data/docker/sonarqube/data:/opt/sonarqube/data -v /data/docker/sonarqube/extensions:/opt/sonarqube/extensions -v /data/docker/sonarqube/logs:/opt/sonarqube/logs -p 9000:9000 -d sonarqube

在安装和使用 SonarQube 的时候踩了很多坑,如果在运行过程中出现如下错误:

vbnet 复制代码
WARN: Unable to locate 'report-task.txt' in the workspace. Did the SonarScanner succeed?
ERROR: SonarQube scanner exited with non-zero code: 137
Finished: FAILURE

这很可能是由于内存不足导致的。请检查服务器内存配置并进行相应调整。

配置 SonarQube

  1. 访问 SonarQube 控制台:在浏览器中输入 http://<your_server_ip>:9000

  2. 登录 SonarQube:使用默认的管理员用户名(admin)和密码(admin)登录。

  3. 更改管理员密码:点击右上角的 "Administrator",选择 "我的账号",然后在 "安全" 选项卡中更改密码。

  4. 创建一个新的项目:点击 "Create new project",输入项目名称和项目密钥,然后点击 "Set Up"。

  5. 生成项目令牌:输入一个名称,点击 "Generate",然后复制生成的令牌。

集成 Jenkins 和 SonarQube

  1. 安装 SonarQube 插件:在 Jenkins 控制台中,点击 "Manage Jenkins" > "Manage Plugins" > "Available",搜索 "SonarQube",然后安装 "SonarQube Scanner for Jenkins" 插件。

  2. 配置 SonarQube 服务器:点击 "Manage Jenkins" > "Configure System",在 "SonarQube servers" 部分,点击 "Add SonarQube"。输入名称、服务器 URL(例如:http://<your_server_ip>:9000)和之前生成的项目令牌。

  1. 配置 Jenkins 项目:在 Jenkins 控制台中,点击 "New Item",输入项目名称,选择 "Freestyle project",然后点击 "OK"。在项目配置页面,配置源代码管理、构建触发器等选项。

这里主要是设置 Gitee 代码仓库 和 Node

  1. 添加 SonarQube 扫描步骤:在 "Build" 部分,点击 "Add build step",选择 "Execute SonarQube Scanner"。根据项目的编程语言和构建工具,配置 "Analysis properties"。
  1. 保存并构建项目:点击 "Save",然后点击 "Build Now"。等待构建完成,查看 SonarQube 分析结果。

配置 Gitee Webhooks

  1. 登录 Gitee,进入项目页面,点击 "设置" > "Webhooks"。

  2. 点击 "添加Webhook",输入 "Payload URL"(例如:http://<your_server_ip>:8080/gitee-webhook/)、"Secret" 和 "Confirm password"。选择需要触发 Jenkins 构建的事件,然后点击 "添加"。

  3. 在 Jenkins 项目中配置 Gitee Webhooks:点击 "Configure",在 "Build Triggers" 部分,勾选 "Gitee Webhooks"。配置 "Secret" 和触发构建的事件,然后点击 "Save"。

通过 SSH,实现 Jenkins 和 Gitee 的连接: 请参考 这篇文章 进行配置。

使用

现在,只要我提交代码到 master 分支,Gitee 将自动触发 Jenkins 构建,并通过 SonarQube 分析代码质量。在 Jenkins 的任务 Console Output 中可以看到 SonarQube 的日志,点击链接,可以跳转到 SonarQube 查看代码分析的结果

结束

至此,我们已经成功搭建了 Jenkins、SonarQube 和 Gitee 的 CI/CD 环境。后续可以根据实际需求,进一步优化和完善 CI/CD 流程。

彩蛋

在搭建完整套流程之后,真正用起来,其实还是有很多地方需要改进,比如 CD 流程需要更加完善、根据 SonarQube 检查结果判断是否继续进行打包、版本回滚功能 等等。就本文分享的内容,都耗费了我好几个周末。

作为一个精力有限的程序员,在部署个人业务时,如果想要一个开箱即用的 CI/CD 工作流怎么办,在我不懈的搜索下,有了答案 阿里云效流水线

阿里云效流水线,我花了半天,就把个人项目集成进去了。有很多插件可以用,关键是 免费

关于 阿里云效 的集成和使用方法,本文就不再赘述了,掘金上也有很多优秀的相关文章可以查看

相关推荐
@大迁世界15 分钟前
TypeScript 的本质并非类型,而是信任
开发语言·前端·javascript·typescript·ecmascript
GIS之路24 分钟前
GDAL 实现矢量裁剪
前端·python·信息可视化
是一个Bug28 分钟前
后端开发者视角的前端开发面试题清单(50道)
前端
Amumu1213829 分钟前
React面向组件编程
开发语言·前端·javascript
持续升级打怪中1 小时前
Vue3 中虚拟滚动与分页加载的实现原理与实践
前端·性能优化
GIS之路1 小时前
GDAL 实现矢量合并
前端
hxjhnct1 小时前
React useContext的缺陷
前端·react.js·前端框架
冰暮流星1 小时前
javascript逻辑运算符
开发语言·javascript·ecmascript
前端 贾公子1 小时前
从入门到实践:前端 Monorepo 工程化实战(4)
前端
菩提小狗1 小时前
Sqlmap双击运行脚本,双击直接打开。
前端·笔记·安全·web安全