一.DevOps是什么?
DevOps一词来自于Development和Operations的组合,突出重视软件开发人员和运维人员的沟通合作,
通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和可靠。
目前对DevOps有太多的说法和定义,不过他们有一个共同的思想:解决开发者和运维者之间曾经不可逾越的鸿沟,
增强开发者与运维者之间的沟通和交流,个人认为,DevOps可以用一个公式表达:
文化观念的改变 + 自动化工具 = 不断适应快速变化的市场
强调:DevOps是一个框架,是一个方法论,并不是一套工具,他包括一系列的基本原则和实践。
其核心价值在于以下两点:
- 更快速的交付,响应市场的变化
- 更多的关注业务的改进与提升
二.为什么需要DevOps?
1.产品迭代
在现实工作中,往往都是用户不知道自己想要什么,但是当我们设计完一个产品后,他后告诉我们不需要什么,这样我们的产品需要反复的迭代,
而且过程可能是曲折的,那我们有什么好的办法快速的交付价值,灵活的响应变化呢,答案就是DevOps,因为DevOps是面向业务目标,助力业务成功的最佳实践。
2.技术革新
现在的IT技术架构随着系统的复杂化不断的革新,从最期的所有服务在一个系统中,发展到现在的微服务架构、从纯手动操作到全自动流程、从单台物理机到云平台
三.DevOps如何落地
1.落实DevOps的指导思想
- 高效的协作和沟通
- 自动化流程和工具
- 迅速敏捷的开发
- 持续交付和部署
- 不断学习和创新
敏捷管理:一支训练有素的敏捷开发团队是成功实施DevOps的关键
持续交付部署:实现应用程序的自动化构建/部署/测试/发布
通过技术工具,把传统的手工操作转变为自动化的流程,这不仅有利于提高产品开发、运维部署的效率,还能减少人为因素引起的失误和事故,提早发现问题并及时解决问题,这样保证产品质量。
DevOps自动化流程:
IT服务管理:可持续的、高可用的IT服务是保障业务正常的关键要素,它与业务是一个整体。
IT 服务管理(ITSM),它是传统的“IT 管理”转向为“IT 服务”为主的一种模式,前者可能更关注具体服务器管理、网络管理和系统软件安装部署等工作;而后者更关注流程的
规范化、标准化,明确定义各个流程的目标和范围、成本和效益、运营步骤、关键成功因素和绩效指标、有关人员的责权利,以及各个流程之间的关系等,比如建立线上事故解决流程、服务配置管理流程等;
精益管理:建立一个流水线式的 IT 服务链,打通开发与运维的鸿沟,实现开发运维一体化的敏捷模式。
精益生产主要来源于丰田生产方式 (TPS)的生产哲学,它以降低浪费、提升整体客户价值而闻名,它主要利用优化自动化流程来提高生产率、降低浪费。所以精益生产的精髓是即时制(JIT)和自动化(Jidoka)。
精益管理贯穿于整个 DevOps 阶段,它鼓励主动发现问题,不断的优化流程,从而达到持续交付、快速反馈、降低风险和保障质量的目的。
四.实施DevOps的具体方法
1.建立快速敏捷的团队
按照业务功能划分团队,建立沟通群组,设置产品负责人(一个策划人员)、Scrum Master(我们一般选择测试人员担任,测试驱动开发模式)和开发者团队(前端工程师、后端工程师、测试各一名
2.实施自动化的流程:
提交:工程师将代码在本地测试后,提交到版本控制系统,如 Git 代码仓库中。
构建:持续整合系统(如 Jenkins CI),在检测到版本控制系统更新时,便自动从 Git代码仓库里拉取最新的代码,进行编译、构建。
单元测试:Jenkins 完成编译构建后,会自动执行指定的单元测试代码。
部署到测试环境:在完成单元测试后,Jenkins 可以将应用程序部署到与生产环境相近的测试环境中进行测试。
预生产环境测试:在预生产测试环境里,可以进行一些最后的自动化测试,例如使用Appium 自动化测试工具进行测试,以及与实际情况类似的一些测试可由开发人员或客户人员手动进行测试。
部署到生产环境:通过所有测试后,便可以使用灰度更新将最新的版本部署到实际生产环境里
3.DevOps在实施过程中经常遇到的问题
人手紧缺
跨部门协作,前期沟通培训成本高
前期投入工作量大见效少。
五.DevOps技术栈
1.敏捷管理工具
Trello Teambition Worktile Tower
2.产品&质量管理
confluence 禅道 Jira Bugzila
其中 confluence 和禅道主要是产品的需求、定义、依赖和推广等的全面管理工具;而Jira 和 Bugzilla 是产品的质量管理和监控能力,包括测试用例、缺陷跟踪和质量监控等。目前我们使用 Jira 和禅道较多。
· 3.代码仓库管理
Git Gitlab GitHub
Git 是一个开源的分布式版本控制系统;Gitlab 和 Github 是用于仓库管理系统的开源项目,它们使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务。我们主要使用的是 Git 和 Gitlab。
4.自动化构建脚本
Gradle Maven SBT ANT
5.虚拟化与容器化
VMware VirtualBox Vagrant Docker
6.持续集成与持续部署
Jenkins Hudson Travis CI CircleCI
Jenkins 是一个开源软件项目,是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能,它的前身为Hudson。
Travis CI 是目前新兴的开源持续集成构建项目,它与 jenkins 很明显的区别在于采用yaml 格式,简洁清新独树一帜。
CircleCI 是一个为 web 应用开发者提供服务的持续集成平台,主要为开发团队提供测试,持续集成,以及代码部署等服务。
7.自动化测试工具
Appium:Appium 是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的。可用于 IOS 和 Android 以及 firefox 的操作系统
Selenium:Selenium 测试直接在浏览器中运行,就像真实用户所做的一样。Selenium 测试可以在Windows、Linux 和 Macintosh 上的 Internet Explorer、Mozilla 和 Firefox 中运行
Mock测试:Mock 测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。这个虚拟的对象就是 Mock 对象,Mock 对象就是真实对象在调试期间的代替品。
Java 中的 Mock 框架常用的有 EasyMock Mockito 等
8.自动化运维工具
Ansible Puppet Chef Saltstack
9.监控管理工具
zabbix:Zabbix 是一个基于 WEB 界面的提供分布式系统监视以及网络监视功能的企业级开源解决方案。
ELK Stack日志分析系统:ELK Stack 是开源日志处理平台解决方案,背后的商业公司是 Elastic。它由日志采集解析工具 Logstash、基于 Lucene 的全文搜索引擎 Elasticsearch、分析可视化平台Kibana 三部分组成。
云监控(如 Amazon CloudWatch):Amazon CloudWatch 是一项针对 AWS 云资源和在 AWS 上运行的应用程序进行监控的服务。您可以使用 Amazon CloudWatch 收集和跟踪各项指标、收集和监控日志文件、设置警报以及自动应对 AWS 资源的更改