什么是ci/cd
首先要说的ci/cd 是分成三部分 持续集成,持续交付,持续部署;为了快速、自动化、可重复的方式 处理工程;当然有两部分的说法,都可以自己定
开发阶段: 编码 -> 构建 -> 集成 -> 测试 -> 交付 -> 部署

需要注意的是ci中的test阶段不是 交给测试人员的测试环境,而是自动化测试; cd中的Delivery才是包含测试环境,stg环境,灰度环境等;
1. 持续集成(CI)
持续集成就是把多个码农写的代码集成到同一个分支,然后经过编译、测试、打包之后将程序保存到 仓库中。
CI 需要具备这些:
1. 全面的自动化测试。这是实践持续集成&持续部署的基础,同时,选择合适的自动化测试工具也极其重要;
2. 灵活的基础设施。容器,虚拟机的存在让开发人员和 QA 人员不必再大费周折;
3. 版本控制工具。如 Git,CVS,SVN 等;
4. 自动化的构建和软件发布流程的工具,如 Jenkins,flow.ci;
5. 反馈机制。如构建/测试的失败,可以快速地反馈到相关负责人,以尽快解决达到一个更稳定的版本。
私有部署和托管型持续集成系统:
- Self Hosted CI 指的是将软件部署在公司的机房或内网中,需要提供多台服务器来完成 CI 系统的
运转,同时需要对不同机器之间进行环境配置。比如 Jenkins ;
- Hosted CI 指的是由 SaaS 型的 CI 服务,全程在线进行构建配置,不需要考虑装机器,装软件,
环境搭建等成本。比如 TravisCI
对比两种 CI 服务:
- Self Hosted CI 对构建环境有完全的控制权,能够实现完全定制。但需要搭建环境和配置、
维护成本高,需要买专门的机器,花费人力物力且更新迁移风险高;
- Hosted CI 无需额外机器,几分钟就可以用起来。可以根据你的需要动态调度资源。
省时,省心,省力。
2. 持续交付(CD / Continuous Delivery)
持续交付就是定时地、自动地从 仓库中 将最新的程序部署到测试环境里。
3. 持续部署(CD / Continuous Deployment)
持续部署就是定时地、自动地将过去一个稳定的发布版本部署到生产环境里。

一个基本的ci/cd pipeline

容器镜像
代码管理后,需要一个核心控制器(Deployment Manager),生成容器(container) 和打包镜像,最后放到容器中。当然生成容器的过程中可能需要容器集群管理(比如:k8s);

总结
ci/cd的理解像是一种方法,条条大路通罗马,需要根据自己团队和业务,选择通往罗马的路和行驶工具;
补充
自动化测试

看看图就能知道,最基础的单元测试,是开发最快,成本最低的。越往上时间成本就越来越高;我的理解 更是越是基础的单元测试 越简单,到了ui层面首先业务广,更新快等原因导致ui层面的自动化测试难做~
摘自- www.jianshu.com/p/52aca1313…
github 市场
如果用git可以搜一下 github市场有很多推荐,ci,deployment