目录
【写在前面】
读书笔记,做记录,供自学,如侵,请告知,会删。
1. 什么是Devops
1.1 定义
DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序,软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。
它是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。
它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运维工作必须紧密合作。
1.2 核心思想
对Devops的定义有很多种,它们共同的思想是:解决开发者和运维者之间曾经不可逾越的鸿沟,增强开发者和运维者之间的沟通和交流。
1.3 主要特点
(1)适应变化,产品需求可以不断迭代变化。研发模式能对应这种变化(来自于需求,外部架构,市场反馈等)。
(2)快速交付有价值的软件。
(3)有包容的文化。
2. Devops的价值
Devops没有统一的价值和最佳实践,都是根据每个团队的具体情况来看。
一些通用的价值比如:
(1)代码的提交直接触发:消除等待时间,快速反馈。
(2)每个变化对应一个交付管道:使问题定位和调试变得简单。
(3)全开发流程高效自动化:稳定,快速,交付结果可预测。
(4)持续进行自动化回归测试:提升交付质量。
(5)设施共享并按需提供:资源利用最大化。
3. Devops的技术栈与工具链
Devops要通过技术工具链完成持续集成,持续交付,用户反馈和系统优化的整合。
常用的技术,工具,服务,参考如下:
(1)版本控制&协作开发:
GitHub, GitLab, BitBucket, SubVersion, Coding, Bazaar
(2)自动化构建和测试:
Apache Ant, Maben, Selenium, PyUnit, QUnit, JMeter, Gradle, PHPUnit
(3)持续集成&交付:
Jenkins, Capistrano, BuildBot, Fabric, Tinderbox, Travis CI, flow.ci Continuum, LuntBuild, CruiseControl, Integrity, Gump, Go
(4)容器平台:
Docker, Rocket, Ubuntu(LXC), 第三方厂商(AWS, 阿里云等)
(5)配置管理:
Chef, Puppet, CFengine, Bash, Rudder, Powershell, RunDeck, Saltstack, Ansible
(6)微服务平台:
OpenShift, Cloud Foundry, Kubernetes, Mesosphere
(7)日志管理:
Logstash, CollectD, StatsD
(8)监控,警告&分析:
Nagios, Ganglia, Sensu, zabbix, ICINGA, Graphite, Kibana
4. Devops落地实现
(1)提交:
工程师将代码在本地测试后,提交到版本控制系统,如Git代码仓库中。
(2)构建:
持续整合系统(Jenkins CI),在检测到版本控制系统更新时,便自动从Git代码仓库中拉去最新的代码,进行编译,构建。
(3)单元测试:
Jenkins完成编译构建后,会自动执行指定的单元测试代码。
(4)部署到测试环境:
在完成单元测试后,Jenkins可以将应用程序部署到与生产环境相近的测试环境中进行测试。
(5)预生产环境测试:
在预生产测试环境中,可以进行一些最后的自动化测试,例如用Appium自动化测试工具进行测试,以及与实际情况类似的一些测试可由开发人员或客户人员手动进行测试。
(6)部署到生产环境:
通过所有测试后,便可以使用灰度更新将最新的版本部署到实际生产环境中。
5. Devops与敏捷
敏捷是Devops的一种实践。
Devops的范围更广一些,是端到端的过程。敏捷一般是指需求到研发。
(图源:敏捷与DevOps的区别和联系是什么?二者如何结合?)
思考:
不要将在DevOps, SAFe, Scrum, Kanban中所学到的直接套在日常的软件开发中,而是应该从我们日常的软件开发中,去引导和设计出我们所真正需要的DevOps, SAFe, Scrum, Kanban...
思考:
Dubbo协议和HTTP协议的区别。
敏捷认证:
(1)PMI机构:ACP, PMP, SCM
(2)exin机构:dof-dop-dom