一、DevOps概念
1、DevOps是什么
- 黄色部分代表开发人员
- 粉色部分代表测试人员
- 蓝色部分代表运维人员
- 合并的部分代表三方的都需要公知的东西,保证三方可以很好的协调工作
DevOps可以看作开发、运维和测试(QA)三者的交集 突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和可靠。 DevOps希望做到的是软件产品交付过程中IT工具链的打通,使得各个团队减少时间损耗,更加高效的协同工作。专家们总结出了上面这个DevOps能力图,良好的闭环可大大增加整体的产出。
2、CICD是什么
CI:持续集成
CD:持续部署或者持续交付
1、基本理念
1、持续集成(Continuous Integration)
持续集成是指软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快的发现其中的错误
CI需要具备这些
全面的自动化测试。
这是实现持续集成和持续部署的基础,同时,选择合适的自动化工具也及其重要。灵活的基础设备.
容器、虚拟机的存在让开发人员和QA人员不必再大费周折版本控制工具。
如git、svn等自动化的构建和软件发布流程的工具。
如 Jenkins,flow.ci;
2、持续交付(Continuous Delivery)
持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」中。持续交付优先于整个产品生命周期的软件部署,建立 在高水平自动化持续集成之上。
持续交付和持续集成的优点非常相似:
快速发布。
能够应对业务需求,并更快地实现软件价值。编码->测试->上线->交付
的频繁迭代周期缩短,同时获得迅速反馈;高质量的软件发布标准。
整个交付过程标准化、可重复、可靠,整个交付过程进度可视化,
方便团队人员了解项目成熟度;更先进的团队协作方式。
从需求分析、产品的用户体验到交互 设计、开发、测试、运维等角色密 切协作,相比于传统的瀑布式软件团队,更少浪费。
3、持续部署(Continuous Deployment)
持续部署是指当交付的代码通过评审之后,自动部署到生产环境中。持续部署是持续交付的最高阶段。
这意味着,所有通过了一系列的自动化测试的改动都将自动部署到生产环境。它也可以被称
为“Continuous Release”。
“开发人员提交代码,持续集成服务器获取代码,执行单元测试,根据测试结果决定是否部署到预 演环境,如果成功部署到预演环境,进行整体验收测试,如果测试通过,自动部署到产品环境, 全程自动化高效运转。
持续部署主要好处是,可以相对独立地部署新的功能,并能快速地收集真实用户的反馈。
“You build it, you run it”,这是 Amazon 一年可以完成 5000 万次部署, 平均每个工程师每天部署 超过 50 次的核心秘籍。 5000/365 = 15 万次
开发人员代码敲完。可以release的时候,提交代码, 剩下的全部一站式自动搞定
2、最佳实践
1、内循环和外循环
- 内循环(开发要做的事情):
- 编码、测试、运行、debug、提交
- 代码推送到代码仓库(svn,git)【代码回滚】
- 进行CI过程(持续集成),万物皆可容器化。打包成一个Docker镜像
- 镜像推送到镜像仓库
- 测试
- 持续部署流程(CD),拿到之前的镜像,进行CD。怎么放到各种环境。uat、test、prod
- 外循环
- 运行时监控
- 生产环境的管理
- 线上反馈到开发
- 再次来到内循环
2、实践流程
新功能或者BUG修复
创建新分支(开发人员)
提交分支代码改变(开发人员)
-
进入持续集成流程
- 当前分支代码进行自动化构建和测试
- 自动化工具推送此次提交
- 自动化集成测试
- 可以看到修改效果
- 人工确认此次功能是否发布到生产环境
- 代码合并
- 进入持续部署流程