CI-持续集成 ( Continuous integration)
互联网软件的开发和发布,已经形成了一套标准流程,最重要的组成部分就是持续集成
说白了,持续集成就是软件发布的一套标准流程,遵循这套流程,可以让产品可以快速迭代,同时还能保持高质量。
达成频繁地(一天多次)将代码集成到主干的,并能够快速发现错误的效果。
好处:
- 快速发现错误。
- 防止分支大幅偏离主干。
核心措施-自动化测试:它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。
CD-持续交付 (Continuous delivery)
持续交付指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。
持续交付可以看作持续集成的下一步。它强调的是,不管怎么更新,软件是随时随地可以交付的。
CD-持续部署 ( Continuous deployment)
持续部署是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。
CI / CD 实现流程
简单的说,就是在本地更改代码—>git push推送到代码托管—>⾃动安装依赖,打包测试部署等(开发环境⼀般 ⾃动,⽣产环境⼀般是需要⼿动点击按钮上线)
如下图所示:
- 代码提交
- 开发者向代码仓库提交代码。所有后面的步骤都始于本地代码的一次提交(commit)
- 测试(第一轮)
- 代码仓库对commit操作配置了钩子(hook),只要提交代码或者合并进主干,就会跑自动化测试。
- 测试有好几种:
- 单元测试:针对函数或模块的测试
- 集成测试:针对整体产品的某个功能的测试,又称功能测试
- 端对端测试:从用户界面直达数据库的全链路测试 第一轮至少要跑单元测试。
- 构建 通过第一轮测试,代码就可以合并进主干,就算可以交付了。交付后,就先进行构建(build)。 常用构建工具如下:
- Jenkins - 开源
- Travis - 开源
- Codeship - 对于开源项目可以免费使用
- Strider - 对于开源项目可以免费使用 它们都会将构建和测试,在一次运行中执行完成。
- 测试(第二轮) 第二轮是全面测试,单元测试和集成测试都会跑,有条件的话,也要做端对端测试。所有测试以自动化为主,少数无法自动化的测试用例,就要人工跑。
- 第二轮更全面,是第一轮的补充——也防止开发者不按规范提交代码(还记得git commit -n参数吗?)
- 部署 通过了第二轮测试,当前代码就是一个可以直接部署的版本(artifact)。 生产服务器将打包文件,解包成本地的一个目录,再将运行路径的符号链接(symlink)指向这个目录,然后重新启动应用。 这方面的部署工具有
- docker
- Ansible
- Chef
- Puppet