当前端遇上 CI

胡敏  @新蛋科技

About me

Agenda

  • 项目流程演进
  • 持续集成:What
  • 持续集成:How
  • 持续集成:Why

项目流程演进

常规开发流程

需求 => 设计 => 编码 => 测试 => 发布 => 运维

前后端分离开发流程

多人协作开发流程

你们的项目流程是怎样的呢?

这些问题,你们遇到过么?

  • 代码混乱,没有版本管理(代码靠压缩包共享!)
  • 前端等接口,后端等UI联测(OS:这锅我不背!)
  • 集成测试,代码相互冲突
  • 集成测试,项目无法运行(OS:我的模块肯定没问题)
  • 集成测试,所得非所需(OS:怪我了?)

集思广益 ^.^

  • 规范代码版本管理
  • 尽可能早的集成
  • 增强项目可见性(尽可能早的部署)
  • 尽可能早的测试

多出来的事情谁做呢?

普通公司:不做
TwoB 公司:加班做
土豪公司:招个集成管理员

办法总比问题多!

持续集成:What

持续 集成 (CI)

Continuous integration
  • 持续集成是一种软件开发实践,宗旨是避免集成问题
  • 真的能避免集成问题么? 不一定能!
  • 但是:
    • 能尽可能早的发现集成问题
    • 能尽可能多的减少集成问题

发现得越早,修复成本越低!

持续 交付 (CD)

Continuous delivery
  • 让软件产品的产出过程在一个短周期内完成,以保证软件可以稳定、持续的保持在随时可以发布的状况。

  • 目标在于让软件的构建、测试与发布变得更快以及更频繁。这种方式可以减少软件开发的成本与时间,减少风险。

持续 部署 (CD)

Continuous Deployment
  • 定时地、自动地将过去一个稳定的发布版本部署到生产环境。
  • VS. 持续交付:持续部署是持续交付的最终目标!

所谓 “ 持续

  • 持续,意味不间断。
  • 持续,靠人工势必要付出大量人力物力

在重复性动作上,人容易犯错,而机器犯错的几率几乎为零。

持续集成:How

准备阶段

  • 统一的代码库
  • 多人协作代码提交流程
  • 自动构建
  • 自动化测试?!

执行阶段

  1. 选择CI工具(推荐Jenkins)
  2. 配置CI任务(编写脚本)

提升阶段

  • 单元测试
  • 代码质量分析(静态分析)
  • 自动部署测试环境
  • 一键部署
  • CI 报表

更全面的工具:Gitlab CI/CD

  1. 基于Git的代码管理(灵活的权限配置)
  2. 敏捷项目管理(里程碑、Issue、看板等)
  3. 项目文档管理(Wiki)
  4. 全功能 CI 流水线
  5. K8s集成,支持主流操作系统的 CI Runner
  6. 漂亮的可视化UI

持续集成:Why

Tell me your answers!

不加班!
偷懒!

升职、加薪!

DevOps


discuss

Thanks!


附上两则招聘信息,新蛋等着你


Java高级软件开发工程师

C#软件开发工程师