前言
本文将介绍如何使用 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
-
访问 Jenkins 控制台:在浏览器中输入
http://<your_server_ip>:8080
。 -
解锁 Jenkins:在 Jenkins 的安装日志中,可以看到初始密码,然后输入到控制台。
-
安装插件:选择 "Install suggested plugins",等待插件安装完成。
-
创建管理员用户:按照提示创建一个管理员用户并设置密码。
-
配置 Jenkins URL:确认 Jenkins URL,然后点击 "Save and Finish"。
-
完成 Jenkins 安装:点击 "Start using Jenkins"。
安装完 Jenkins 之后,你可以安装 汉化插件 和 Node,这里就不详细说了,网上有很多案例
安装 SonarQube
由于这款软件对内存有要求,这里使用 2核4G CVM
来部署
- 首先安装 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
-
访问 SonarQube 控制台:在浏览器中输入
http://<your_server_ip>:9000
。 -
登录 SonarQube:使用默认的管理员用户名(admin)和密码(admin)登录。
-
更改管理员密码:点击右上角的 "Administrator",选择 "我的账号",然后在 "安全" 选项卡中更改密码。
-
创建一个新的项目:点击 "Create new project",输入项目名称和项目密钥,然后点击 "Set Up"。
-
生成项目令牌:输入一个名称,点击 "Generate",然后复制生成的令牌。
集成 Jenkins 和 SonarQube
-
安装 SonarQube 插件:在 Jenkins 控制台中,点击 "Manage Jenkins" > "Manage Plugins" > "Available",搜索 "SonarQube",然后安装 "SonarQube Scanner for Jenkins" 插件。
-
配置 SonarQube 服务器:点击 "Manage Jenkins" > "Configure System",在 "SonarQube servers" 部分,点击 "Add SonarQube"。输入名称、服务器 URL(例如:
http://<your_server_ip>:9000
)和之前生成的项目令牌。
- 配置 Jenkins 项目:在 Jenkins 控制台中,点击 "New Item",输入项目名称,选择 "Freestyle project",然后点击 "OK"。在项目配置页面,配置源代码管理、构建触发器等选项。
这里主要是设置 Gitee 代码仓库 和 Node
- 添加 SonarQube 扫描步骤:在 "Build" 部分,点击 "Add build step",选择 "Execute SonarQube Scanner"。根据项目的编程语言和构建工具,配置 "Analysis properties"。
- 保存并构建项目:点击 "Save",然后点击 "Build Now"。等待构建完成,查看 SonarQube 分析结果。
配置 Gitee Webhooks
-
登录 Gitee,进入项目页面,点击 "设置" > "Webhooks"。
-
点击 "添加Webhook",输入 "Payload URL"(例如:
http://<your_server_ip>:8080/gitee-webhook/
)、"Secret" 和 "Confirm password"。选择需要触发 Jenkins 构建的事件,然后点击 "添加"。 -
在 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 工作流怎么办,在我不懈的搜索下,有了答案 阿里云效流水线
阿里云效流水线,我花了半天,就把个人项目集成进去了。有很多插件可以用,关键是
免费
关于 阿里云效
的集成和使用方法,本文就不再赘述了,掘金上也有很多优秀的相关文章可以查看