CI/CD的含义

CI/CD的含义 一、一句话解释CI/CD 是一种软件开发实践让代码从编写 → 测试 → 部署的全过程自动化就像一条自动化流水线。生活中的类比想象你要开一家奶茶店传统方式客人点单 → 你现煮珍珠 → 现泡茶 → 现做奶茶 → 递给客人等很久CI/CD 方式提前准备好珍珠、茶汤、配料客人点单后直接组装快、标准、不容易错二、CI/CD 拆解CI/CD 包含三个核心部分2.1 CIContinuous Integration- 持续集成概念开发人员频繁地将代码合并到主干每次合并都自动构建和测试。类比团队写书❌ 传统方式每人写一章最后拼起来发现风格不统一、页码对不上✅ CI方式每天合并一次自动检查格式、页码、引用# CI 自动做的事1. 开发提交代码到 Git2. 自动拉取最新代码3. 自动编译4. 自动运行单元测试5. 自动检查代码规范6. 生成测试报告2.2 CDContinuous Delivery- 持续交付概念在 CI 的基础上将通过测试的代码自动部署到预发环境随时可以手动发布到生产。类比餐厅备菜提前洗好菜、切好菜、配好料客人点单时厨师直接下锅炒部署到生产只需要一个指令2.3 CDContinuous Deployment- 持续部署概念在持续交付的基础上自动部署到生产环境完全自动化。类比自动售货机投币代码提交自动出货直接上线三、CI/CD 流程示意图是否持续部署部署到测试环境部署到预发环境部署到生产环境持续集成自动编译自动测试代码检查开发写代码提交到GitCI 持续集成测试通过构建镜像/包CD 持续部署用户可用四、具体例子4.1 没有 CI/CD 的团队# 开发小张gitcommit-m添加登录功能gitpush# 通知测试代码推了你测一下# 测试小王gitpull 手动编译 手动部署到测试服务器 手动运行测试 发现 bug 通知开发修复# 每次发布都要1. 手动打包2. 手动上传到服务器3. 手动停止服务4. 手动替换文件5. 手动重启6. 手动测试# 问题❌ 耗时一天只能发布1-2次 ❌ 易错少个步骤就挂了 ❌ 反馈慢提交后第二天才知道结果4.2 有 CI/CD 的团队# .gitlab-ci.ymlCI/CD 配置文件stages:-build-test-deploybuild:stage:build script:-mvn clean package# 自动编译test:stage:test script:-mvn test# 自动测试-sonar-scanner# 代码质量检查deploy:stage:deploy script:-docker build-t myapp .# 自动构建镜像-docker push myapp:latest# 自动推送到仓库-kubectl apply-f deployment.yaml# 自动部署到 K8s效果# 开发只需gitpush# 10分钟后收到消息您的代码已成功部署到测试环境请访问 http://test.myapp.com 查看五、CI/CD 带来的好处维度没有 CI/CD有 CI/CD发布频率每月/每周发布一次每天/每小时发布多次反馈时间提交后第二天才知道提交后10分钟就知道人工操作大量手动操作几乎全自动错误率容易出错机器操作稳定可靠上线时间需要停机维护滚动更新不停机团队效率大量时间花在重复劳动专注于写代码六、常见 CI/CD 工具工具特点适用场景Jenkins最流行插件丰富各种项目需要定制化GitLab CI和 GitLab 深度集成代码在 GitLab 的项目GitHub Actions和 GitHub 深度集成代码在 GitHub 的项目Travis CI配置简单开源项目CircleCI速度快配置灵活云端项目七、实际工作流程示例一个 Java 项目的完整 CI/CD 流程# 1. 开发写代码# 2. git push# 3. CI 自动开始-拉取代码-使用 Maven 编译-运行单元测试-运行集成测试-代码质量检查SonarQube-生成测试报告# 4. 构建镜像-如果所有测试通过-自动构建 Docker 镜像-推送到镜像仓库# 5. CD 自动部署-拉取最新镜像-部署到开发环境-部署到测试环境-部署到预发环境-手动确认后部署到生产# 6. 通知-发送邮件/Slack 通知结果-附上测试报告链接-附上部署环境地址八、总结缩写全称中文核心任务CIContinuous Integration持续集成自动编译、测试、检查CDContinuous Delivery持续交付自动部署到预发环境CDContinuous Deployment持续部署自动部署到生产环境一句话理解CI/CD 就是让机器代替人去做重复的编译、测试、部署工作让开发人员专注于写代码让软件发布更快、更稳、更频繁。