使用 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 工作流怎么办,在我不懈的搜索下,有了答案 阿里云效流水线

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

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

相关推荐
卖报的小行家_2 分钟前
Vue2源码,响应式原理-对象
前端
小钰能吃三碗饭2 分钟前
打造类 RainbowKit 的 Solana 钱包连接套件
前端·web3·区块链
Anlici6 分钟前
如何优化十万数据的浏览体验?从性能、监控到布局全面拆解
前端·性能优化
utmhikari6 分钟前
【日常随笔】万字长文,如何用pyside6开发一个python桌面工具
前端·python·pyqt
JustHappy13 分钟前
「Versakit 0.3 重磅发布」 两个月开发成果全揭!
前端·javascript·vue.js
chenqi22 分钟前
WebGPU和WebLLM:在浏览器中解锁端侧大模型的未来
前端·人工智能
Lingxing23 分钟前
Vue组件树:从设计到实现的全方位指南 🚀
前端·vue.js
玖玖passion25 分钟前
leader:请你用Protobuf进行数据交互🥲
前端
Linruoxin28 分钟前
为什么给 body 设置背景会直接铺满整个视口?
前端·css
Jenlybein31 分钟前
Vue3 权限控制:利用动态路由与自定义指令
前端·vue.js