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

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

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

相关推荐
Redstone Monstrosity2 分钟前
字节二面
前端·面试
东方翱翔9 分钟前
CSS的三种基本选择器
前端·css
Fan_web32 分钟前
JavaScript高级——闭包应用-自定义js模块
开发语言·前端·javascript·css·html
yanglamei196240 分钟前
基于GIKT深度知识追踪模型的习题推荐系统源代码+数据库+使用说明,后端采用flask,前端采用vue
前端·数据库·flask
千穹凌帝41 分钟前
SpinalHDL之结构(二)
开发语言·前端·fpga开发
dot.Net安全矩阵1 小时前
.NET内网实战:通过命令行解密Web.config
前端·学习·安全·web安全·矩阵·.net
叫我:松哥1 小时前
基于Python flask的医院管理学院,医生能够增加/删除/修改/删除病人的数据信息,有可视化分析
javascript·后端·python·mysql·信息可视化·flask·bootstrap
Hellc0071 小时前
MacOS升级ruby版本
前端·macos·ruby
前端西瓜哥1 小时前
贝塞尔曲线算法:求贝塞尔曲线和直线的交点
前端·算法
又写了一天BUG1 小时前
npm install安装缓慢及npm更换源
前端·npm·node.js