持续集成 Continuous Integration - CI

http://www.ruanyifeng.com/blog/2015/09/continuous-integration.html

概念:一天多次地将代码合并到主干
优点:快速发现错误;防止分支大幅度偏离主干

持续交付 Continuous Delivery

概念:频繁地将软件的最新版本提交给质量团队或用户,以供评审

持续部署 Continuous Deployment

概念:持续交付后的下一步,在代码通过评审后,自动部署到生产环境

整体流程

提交——构建和测试——部署——回滚
提交:
开发者向仓库 commit 代码
构建:
将项目 build 起来,并且进行自动化单元测试和集成测试。这一步基本是通过代码仓库的 hook 实现的:只要有 commit 操作,就进行自动化测试
部署:
通过测试的代码就是一个可以直接部署的版本(artifact),将这个版本所有文件打包(字面意思的打包,打成压缩包 tar filename.tar *),发送到生产服务器(当然,也可以是开发服务器、测试服务器或者预发布服务器)。
生产服务器在本地环境解压这个压缩包,并将运行路径的符号链接指向解压路径,并重启应用。
回滚:
当前版本出了问题,就要回到上个版本的构建结果。最简单的做法是修改符号链接,让其指向上一个版本的目录。

效果和优点:

开发者本地(localhost:8080)开发完成后,在代码仓库提交代码,服务器自动部署项目,开发者只需等待部署完成就可以在目标服务器(dev.example.com)看到开发效果