一、 基础概念
1. DevOps
个人理解DevOps是 开发(Development)、技术运营(Operations) 和 质量保障(QA) 三者的交集。
- 是一种重视软件开发人员(Dev)和IT运维技术人员(Ops)之间沟通合作的文化、运动或惯例,改善团队之间的协作关系;
- 是一组过程、方法与系统的统称,包含开发、测试和运维;
- 用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合;
- 透过自动化“软件交付”和“架构变更”的流程,使得构建、测试、发布软件能够更加地快捷、频繁和可靠,按时交付软件产品和服务;
2. CI
- Continuous Integration(CI) 持续集成,可以帮助开发人员 更加频繁 地(有时甚至每天)将 代码更改 合并到 共享分支或"主干" 中。一旦开发人员对应用所做的更改被合并,系统就会通过 自动构建 应用并运行不同级别的 自动化测试(通常是单元测试和集成测试) 来验证这些更改,确保这些更改没有对应用造成破坏。
- 自动化测试内容需要涵盖从类和函数到构成整个应用的不同模块。如果自动化测试发现新代码有 bug,或和已有代码之间存在冲突,CI 可以更加轻松地快速发现这些问题,方便开发人员快速修复这些错误。
2.1 CI的目的
在产品快速迭代的同时保证代码质量。
2.2 CI核心措施
1)代码集成到主干之前,必须通过自动化测试,只要有一个测试用例失败,就不能集成。
2)通过Code Review、代码质量分析工具对代码质量进行把关,以便确定是否能够集成。
持续集成并不能消除Bug,而是让他们非常容易发现和改正。—— Martin Flower
2.3 CI流程
- 开发人员提交代码到 Source Repository (源代码仓库)
- 触发 CI Server(持续集成服务器)的相关功能,执行 编译 -> 测试 -> 输出结果 的流程。
-
向开发人员反馈结果的 report
可以看出,持续集成的 核心 在于 确保新增的代码能够与原先代码正确的集成。与后续要介绍的持续交付以及持续部署,其最主要的差别也就在于其目标不同。
2.4 CI 的优势
- 容易定位问题,保证开发质量。每次代码集成都会执行自动化测试,如果有 bug可以及时发现并处理,以确保代码质量。
-
3. CD
这里的 CD 有两层含义:
3.1 CD 持续交付(Continuous Delivery)
- Continuous Delivery 指的是,新版本为了能够快速安全的交付到生产环境中,需要先将代码 CI(持续集成) 到 类生产环境 中,以便进行相应的业务验证、安全验证、性能验证等过程。一旦 类生产环境 验证通过,新版本可以随时发布到 生产环境。
- 持续交付强调的是,不管怎么更新,软件是随时随地可以交付的。
3.2 CD 持续部署(Continuous Deployment)
- Continuous Deployment 指的是,新版本通过类生产环境的验证后,自动部署 到生产环境中。持续部署的 前提 是 自动化完成测试、构建、验证 等步骤。
- 持续部署强调的是,开发人员对应用的更改在编写后的几分钟内就能生效(假设它通过了自动化测试)。这更加便于持续接收和整合用户反馈。
4. 瀑布型 VS 敏捷型 VS DevOps + 敏捷型开发
二、常用 DevOps 工具
包括版本控制&协作开发工具、自动化构建和测试工具、持续集成&交付工具、部署工具、维护工具、监控,警告&分析工具等等。具体如下:
- 版本控制&协作开发:GitHub、GitLab、BitBucket、SubVersion、Coding、Bazaar
- 自动化构建和测试:Apache Ant、Maven 、Selenium、PyUnit、QUnit、JMeter、Gradle、PHPUnit
- 持续集成&交付:Jenkins、Capistrano、BuildBot、Fabric、Tinderbox、Travis CI、flow.ci Continuum、LuntBuild、CruiseControl、Integrity、Gump、Go
- 容器平台: Docker、Rocket、Ubuntu(LXC)、第三方厂商如(AWS/阿里云)
- 配置管理:Chef、Puppet、CFengine、Bash、Rudder、Powershell、RunDeck、Saltstack、Ansible
- 微服务平台:OpenShift、Cloud Foundry、Kubernetes、Mesosphere
- 服务开通:Puppet、docker Swarm、Vagrant、Powershell、OpenStack Heat
- 日志管理:Logstash、CollectD、StatsD
- 监控,警告&分析:Nagios、Ganglia、Sensu、zabbix、ICINGA、Graphite、Kibana
拉取、预处理、编译、构建、打包、镜像、发布