什么是CI/CD
CI/CD 是现代软件开发中核心的自动化实践框架,它通过自动化流程打破开发、测试、部署之间的壁垒,是DevOps(开发与运维协同)文化的核心技术支撑。
CI:Continuous Integration,持续集成
CD: Continuous Delivery/Deployment,持续交付/持续部署
CI/CD的核心工作流程
以一个WEB应用为例,一个完整的CI/CD流程通常包含”代码提交—>构建—>测试—>部署—>监控“五大环节,全流程自动化触发,无需人工干预。
1.代码提交开发者遵循预设的分支策略(如 Git Flow),通过 Git 将代码提交至指定分支(例如feature/*分支开发功能、main分支承载生产代码)。
2.自动化构建CI工具(如Jenkins、Github)拉取最新的代码,并执行构建动作。
编译:将源代码转换为可执行代码,如java-->字节码; 依赖管理:自动下载项目所需依赖,确保环境一致性; 打包:将代码与依赖打包为标准化产物(如Docker镜像、JAVA JAR包)。
3.自动化测试构建完成后,自动执行多维度测试,全面验证代码质量与功能的正确性,避免缺陷代码流入生产环境。
单元测试:验证独立函数/模块的逻辑正确性(如JUnit、Jest执行); 集成测试:检测模块间交互是否是正常的; 系统测试:模拟用户场景验证全流程功能; 代码质量检查:通过工具如SonarQube,检查代码复杂度、重复率、潜在漏洞等。
4.自动化部署测试通过后,进入CD阶段,根据”交付“或”部署“的配置执行不同的操作:
持续交付:将构建产物推送到镜像仓库(如Docker Hub、Harbor),并通知运维、产品团队,等待人工点击”部署到生产“。 持续部署:直接从镜像仓库拉取产物,自动部署到生产环境(如通过K8S调度容器),部署后自动执行”冒烟测试“(快速验证核心功能是否正常,如访问首页、登录接口),验证应用基本可用性。
冒烟测试:Smoke Testing,是软件测试中的一种基础验证方法,旨在快速检查软件的核心功能是否正常工作,确保最基本的可用性,类似“开机检查”。它得名于硬件测试中的场景——如果按下设备电源后冒烟,说明存在严重问题,无需进一步测试。类比软件领域,如果网站的首页都无法打开,后续复杂测试也就没有意义。
5.自动化监控与回滚
部署完成后,监控系统实时追踪应用状态,形成闭环保障:
实时监控:通过prometheus、grafana等工具检测业务指标(如接口成功率、响应时间)和系统指标(如CPU使用率和内存占用)。 异常处理:若指标超出阈值,流水线可自动触发回滚机制,同时通知团队排查问题。 日志留存:记录构建、测试、部署日志,便于追溯问题根源。
主流的CI/CD工具
下表是一些主流的CI/CD工具:
| Jenkins | |||
| GitHub Actions | |||
| GitLab CI/CD | |||
| ArgoCD | |||
| CircleCI |
Git Flow
Git Flow 是由 Vincent Driessen 提出的一套标准化的 Git 分支管理流程,通过定义不同类型分支的职责、生命周期和协作规则,解决了团队开发中 “代码混乱、版本管理无序、发布效率低” 等问题。它定义了5种功能明确的分支,每种分支都有严格的创建来源,用途和合并目标。
| 主干分支 | mainmaster | ||||
| 开发分支 | develop | main | mainrelease | ||
| 功能分支 | feature/xxx | feature/user-login) | develop | develop | |
| 发布分支 | release/vX.Y.Z | release/v1.2.0) | develop | maindevelop | |
| 热修复分支 | hotfix/xxx | hotfix/pay-error) | main | maindevelop |
Jenkins
Jenkins 是一款开源的自动化服务器,主要用于实现 CI/CD(持续集成 / 持续交付)流程的自动化。它通过插件化架构支持几乎所有主流开发工具和技术栈,能够将代码构建、测试、部署等环节串联成自动化流水线,是目前最流行的 CI/CD 工具之一。
Jenkins 的核心工作模式是通过流水线(Pipeline) 将软件交付的多个环节串联成自动化流程 —— 它允许开发者用代码(即 Jenkinsfile)定义从 “代码拉取→构建→测试→部署” 的完整链路,包括每个环节的具体操作(如用 Git 拉取代码、用 Maven 编译、用 JUnit 执行测试、用 Docker 部署等)。
Jenkinsfile的简单示例:
pipeline { agent any // 在任意可用节点执行 stages { stage('拉取代码') { // 阶段1:从Git拉取代码 steps { git url: 'https://github.com/example/web-app.git', branch: 'main' } } stage('构建项目') { // 阶段2:构建应用 steps { sh 'npm install' // 安装前端依赖 sh 'npm run build' // 打包前端资源 } } stage('运行测试') { // 阶段3:执行测试 steps { sh 'npm test' // 运行单元测试 sh 'npm run lint' // 代码质量检查 } } stage('部署到生产') { // 阶段4:部署应用 steps { sh 'docker build -t web-app:${BUILD_NUMBER} .' // 构建Docker镜像 sh 'docker push web-app:${BUILD_NUMBER}' // 推送镜像到仓库 sh 'ssh user@server "docker run -d web-app:${BUILD_NUMBER}"' // 远程部署 } } } post { // 流水线结束后操作 success {echo'部署成功!' // 发送通知到企业微信/Slack } failure {echo'部署失败!' // 发送失败通知 } }}CI/CD的价值
快速交付 降低风险 提升效率 增强可观测性
CI/CD通过自动化构建、测试和部署,实现快速、高质量、低风险的软件交付。它可以让开发团队频繁发布小步迭代,及早发现和修复问题,保证代码质量,同时显著提高开发效率和业务响应速度,降低手工操作和发布风险,实现软件交付的持续稳定与可控。
写在最后这篇文章我们主要梳理了 CI/CD 的核心概念、流程和工具。未来小编打算围绕 软件工程思想 写一个系列文章,系统梳理一下从开发规范、版本管理、测试策略,到自动化运维和高可用架构的一些知识和经验。欢迎大家持续关注,让我们一起在成为自己的路上不断进步!

点个“赞or在看”你最好看!
👇👇👇谢谢各位老板啦!
夜雨聆风