CI&CD
CI(Continuous Integration)持续集成
集成:软件个人研发部分向整体部分组合和交付,以便验证个人研发工作
持续集成:
- 指的是个人将新开发的功能持续不断的合并到主分支,是一种质量反馈机制,目的是尽早发现代码中的问题。
- 是一种软件开发实践,团队成员频繁将他们的工作成果集成在一起;每次提交后,自动触发运行一次包含自动化验证集的构建任务,只有通过测试的代码才能够合并到主分支。
- 在 CI 中应该尽早的触发自动化测试验证,尽早发现问题
包含要素:
- 代码库管理
- 代码编译
- 质量验证
- 自动化测试
- code review
- 漏洞扫描
- 代码混淆
- 代码加固
主干开发开发流程:
- 从主干分支 checkout 开发分支
- 修改代码
- 本地构建验证
- 再次合并主干代码,冲突处理
- 本地二次构建验证
- 合并开发分支代码到主干分支
- 次级构建(CI 自动触发构建和验证工具集),在构建验证过程中需要锁住主干分支,直到验证通过后才能继续提交
CD(Continuous Deployment)持续部署
部署:将继承好的软件包按照预先设计的方案安装到计算节点上,且保证系统可以正常启动 持续部署:能够自动化、多批次、可控地实现软件的部署、控制故障影响范围或方便轻松解决故障问题
持续部署是一种可控制故障影响范围和快速定位问题的软件部署实践,特性包括:自动化、多批次和可控,包含要素:
- 部署生产环境
- 用户验收测试
- 软件包版本管理
- 数据版本管理
- 配置管理
- 容器管理
- 依赖管理
- 特性开关
- 发布策略
部署流程:
- 将 CI 构建的软件包,按照版本号存入部署库
- 人工或自动的以一定的策略部署到生产环境
部署方案:
- 蓝绿部署:维护两个相同的主机环境,一个用于生产、一个用于预发布、轮换使用
- 金丝雀部署(灰度部署):对新版本进行小批量部署、小流量测试,没有问题后逐步加到部署和引流量,最后把所有流量引导到新版本
- 暗箱发布:新版本被逐步测试和部署到生产环境中,但用户不可见,用于开发人员分析与确认后,在通过开关系统开放给所有用户
Continuous Integration(持续集成)
Continuous Delivery(持续交付)