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

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

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

相关推荐
susu10830189112 分钟前
vue3 css的样式如果background没有,如何覆盖有background的样式
前端·css
Ocean☾3 分钟前
前端基础-html-注册界面
前端·算法·html
Rattenking4 分钟前
React 源码学习01 ---- React.Children.map 的实现与应用
javascript·学习·react.js
Dragon Wu6 分钟前
前端 Canvas 绘画 总结
前端
CodeToGym10 分钟前
Webpack性能优化指南:从构建到部署的全方位策略
前端·webpack·性能优化
~甲壳虫11 分钟前
说说webpack中常见的Loader?解决了什么问题?
前端·webpack·node.js
~甲壳虫15 分钟前
说说webpack proxy工作原理?为什么能解决跨域
前端·webpack·node.js
Cwhat17 分钟前
前端性能优化2
前端
熊的猫1 小时前
JS 中的类型 & 类型判断 & 类型转换
前端·javascript·vue.js·chrome·react.js·前端框架·node.js
瑶琴AI前端1 小时前
uniapp组件实现省市区三级联动选择
java·前端·uni-app