内容纲要
前置知识
概念
DevOps = Development(开发人员) + Operations(运维人员)
DevOps 是一种重视“开发人员”和“运维人员”之间沟通合作的文化、运动或者惯例。通过自动化“软件交付”和“架构变更”的流程,使构建、测试、发布软件能更快、更频繁和更可靠。
核心概念
- Automated infrastructure(自动化,系统之间的集成)
- shared version control(SVN共享源码)
- one step build and deploy(持续构建和部署)
- feature flags(主干开发)
- Shared metrics
- IRC and IM robots(信息整合)
各部门关系图
对应用程序发布的影响
减少变更范围
消除等待、快速反馈
使问题定位、调试变得简单
加强发布谐调,提升交付质量
自动化,稳定、快速、交付结果可预测
资源利用最大化
CI/CD 一线贯穿以上技术要点
主干开发是 CI 的前提
自动化以及代码周边集中管理是实施 CI 的必要条件
注意 ↓
CI/CD 是 DevOps 的技术核心,在没有自动化测试、CI/CD 之下,DevOps 就是空中楼阁
工作流
DevOps 实践关键阶段
- 持续集成
- 作用:确保开发分支代码每次 Merge Request 通过,可以随时合并到 Dev 分支
- 阶段
- build:开发分支代码编译、单元测试
- package:打包(Docker 镜像)
- deploy:部署到测试环境
- test:集成测试
- 持续交付
- 作用:确保代码合并到 Dev 分支后,Dev 分支代码能够在生成环境中测试通过,并进行灰度测试
- 阶段
- build: Dev 分支代码编译、单元测试
- package:打包(Docker 镜像)
- deploy:部署到测试环境
- test:基础测试
- canary:灰度测试
- 持续部署
- 作用:合并 Dev 分支代码到 Master 分支,打包并发布到线上
- 阶段
- build:Master 分支代码编译、单元测试
- package:打包(Docker 镜像)
- clear:Master 代码 Merge 回 Dev 分支
- production:发布到线上
工具箱
- 代码管理(SCM)
- GitHub、GitLab、BitBucket、SubVersion
- 构建工具
- Ant、Gradle、maven
- 自动部署
- Capistrano、CodeDeploy、Ansible、Jenkins
- 持续集成(CI)
- Bamboo、Hudson、Jenkins
- 配置管理
- Ansible、Chef、Puppet、SaltStack、ScriptRock GuardRail、Consul、Apollo
- 容器
- Docker、LXC、第三方厂商如AWS
- 编排
- Kubernetes、Core、Apache Mesos、DC/OS
- 服务注册与发现
- Zookeeper、etcd、Consul
- 脚本语言
- python、ruby、shell
- 日志管理
- ELK、Logentries
- 系统监控
- Datadog、Graphite、Icinga、Nagios
- 性能监控
- AppDynamics、New Relic、Splunk
- 压力测试
- JMeter、Blaze Meter、loader.io
- 预警
- PagerDuty、pingdom、厂商自带如AWS SNS
- HTTP加速器
- Varnish
- 消息总线
- ActiveMQ、SQS
- 应用服务器
- Tomcat、JBoss
- Web服务器
- Apache、Nginx、IIS
- 数据库
- MySQL、Oracle、PostgreSQL等关系型数据库;cassandra、mongoDB、redis等NoSQL数据库
- 项目管理(PM)
- Jira、Asana、Taiga、Trello、Basecamp、Pivotal Tracker
参考链接
给 DevOps 初学者的入门指南