缘起
- 不知道啥时候从图书馆借的了,查看一下是2017-03-30到期了,又在图书馆借的。
- 2017-01-04之前整理还书时,发现的这本书,还是用别人的卡借的。
- 2017-01-18开始看;2017-05-17开始从chap5看起;看了6个番茄钟,全书翻看完了,但部分没有实践过,我对CI方面的论文有需要,8月份左右搭建环境实践下,我本地倒是配置了docker环境了。
- 2017-05-18全书读完,从chap4开始,全书看了5个番茄钟。
- 书的副标题是驭DevOps之力强化技术栈并优化IT运行,电子工业出版社,2016年10月第1版,2016年10月第1次印刷。
- 作者是Joakim Verona,译者是高清华和马博文。
内容
- 译者序
- 李光磊
- “共同协作”是个看上去很美的词。为什么大家还不赶紧拥抱它?
- 成本可能还挺搞的。
- 在看见收益和认清自己之前,可能大多数人也会像蔡桓公那样默认拒绝吧:“医之好治不病以为功”。
- 前言
- DevOps旨在将不同的社区,比如开发和动维社区,联合起来变成一个更有效率的整体。
- 环境最好是基于GNU/Linux的操作系统,例如Fedora。
- 代码下载
chap1 DevOps和持续交付简介 1/200
- DevOps简介
- Patrick Debois
- 2009年 O'Reilly Velocity大会
- 多快才算快
- 敏捷之轮
- 敏捷开发可以分为几下周期:投资级的周期、Srum周期、看板周期、持续集成周期。
- 敏捷不只是形式
- Richard Feynaman
- 我们是否正在做正确的事?是否还在正确的路上?时刻关注我们的目标并经常问自己,是件非常重要的事情。 这是敏捷思考的中心。
- DevOps和ITIL
- ITIL(Information Technology Infrastructure Library)
chap2 洞察全局 P9/200
- 在开始实践之前,你需要搞清楚最终需要的结果是什么。
- DevOps流程和持续交付--概览
- 开发人员
- 版本控制系统
- 构建服务器
- Jenkins
- 工件库
- Java世界里,流行的方案是Sonatype Nexus。
- amazon的S3服务。
- 包管理器
- Red Hat系统上:
yum
和dnf
- Debian系统上:
aptitude/dpkg
- Red Hat系统上:
- 测试环境
- 预发布/生产
- 发布管理
- Scrum、看板和交付流水线
- Scrum:关注的sprint周期,可以隔周或每月。
- 看板:关注的是更短的周期,可以说是每天。
- 我们本质上需要两个或两个以上的、被维护着并且相互隔离的环境。 (Vagrant虚拟同,AWS云实例,Docker容器)
chap3 DevOps如何影响架构 P19/200
- DevOps和持续交付着眼于软件架构的两个非功能性需求
- 我们需要频繁交付小的变更
- 我们需要对质量有大的信心
- 架构经验原则
- 关注点分离:我们应该分开考虑系统不同的方面
- 内聚原则:软件模块的各部分之间相互关联的程度
- 耦合:两个模块间相互依赖的程度。
- liquibase是一数据库迁移系统,其内核久经考验。Flyway是Java平台的另一个例子。
- 在迁移数据库时另一个需要考虑的事是如何配合滚动升级。
- 1968年,Melvin Conway提出一个观点,那就是设计软件的组织结构,等价于软件的组织架构。
- Tolerant Reader模式,它的含义很简单:服务的消费端应该忽略那些它无法识别的数据。
- 微服务在系统间有更多的集成点,比起单块系统来说更有可能失败。
chap4 一切皆代码 P35/200
- 软件即服务的解决方案:GitHub、Bitbucket或GitLab。
- 云提供商:AWS或Rackspace。
- 源代码管理历史
- 把源代码的历史版本存放在不同的档案里
- 签入和签出的集中式源代码管理(RCS、SCCS)
- 一个集中式的存储,在提交之前需要合并(CVS、Subversion)
- 去中心化的存储。
- 选对wiki引擎的话,把所有文档都以wiki的形式存放在集中式源代码库里是可行的。
- 分支策略
- 工件版本命名 SemVer
- Gerrit
- 基于Git的代码审查工具,它可以提供一个这种状况下的解决方案。
- Gerrit适用于squashing(挤压)和rebasing(变基)。
chap5 构建代码 55/200
- Jenkins是个灵活的开源构建服务器
- 签出代码后,要能在本地开发机上顺利地构建
- Jenkins是Hudson构建服务器的一个fork。Kohsuke Kawaguchi曾是主要的贡献者,2010年Oracle获得了Hudson的注册商标。
- 管理构建依赖
- Maven工具,它的POM文件描述了所需的构建依赖。
- javascript的构建工具,Grunt也有类似的依赖。
- GNU的autotools
- RPM(Red Hat Package Manager)系统的核心是一个称为spec文件的构件描述文件。
- fpm
- 构建主机,以及构建从机,构建的触发时机,构建的流水顺序
- 可选的构建服务器
- Travis CI
- Buildbot
- Go服务器
- Atlassian提供的Bamboo
- 使用Sonar代码质量可视化器
chap6 测试代码 77/200
- 单元测试的Junit和用于网站前端测试的Selenium
- Mocking是指编写模拟资源去实现单元测试的实践。
- 有时会用fake或stub。
- Mockito是一个java的mock框架,被移植到了Python
- Cobertura是Java中度量测试覆盖率的工具。其他类似的工具包括jcoverage和Clover。
- 自动化集成测试和单元测试的主要区别在于使用了相对较少的mocking。
- Arquillian是一个测试工具的例子,测试级别更接近于集成测试,特定于Java应用服务器。
- Apache JMeter是一个开源的性能测试工具。
- Cucumber是一种测试用例以文本写成并关联测试代码的测试框架。
- Cucumber测试是以扩展名为feature的纯文本实现的
- Cucumber测试代码的描述是通过名为Gherkin的词表完成的
- 自动化GUI测试
- Selenium
- Sikuli
- Selenium通过激活浏览器并使其指向应用的web服务器,在自身集成到JavaScript和DOM层后,远程控制浏览器。
- Selenium Grid
- JavaScript测试
- Karma是JavaScript语言单元测试的测试运行器
- Jasmine是一个类似Cucumber的行为测试框架
- Protractor是AngularJS的测试框架
- Protractor在底层使用了Selenium web驱动实现。
- 测试后端集成点
- soapUI
- 测试驱动开发、PEPL(交互式命令行)驱动开发
- 一个应用有以下几层
- web前端
- JSON/REST服务接口
- 应用服务后端层
- 数据库层
chap7 部署代码 105/200
- 基础操作系统包括Red Hat Satellite和Cobbler,它们工作的原理相似,但是Cobbler更加轻量。
- Puppet有一个扩展的系统允许机器拥有不同的角色,这些角色反过来代表一组包和配置。Ansible和Salt也有这类系统。
- 虚拟机监控程序hypervisor抽象底层硬件和在相互竞争的不同虚拟机之间调度硬件资源的组件。
- VMware,KVM,Xen,VirtualBox都是虚拟化技术。
- **不同类型的虚拟化技术的共同点在于它们提供了可以自动化虚拟机管理的API。**libvirt就是这样的API,它可以用在几种不同的虚拟管理程序(hypervisor)底层,比如KVM,QEMU,Xen和LXC。
- Vagrant、Docker相关的技术,两个是不是一样的?
- Pupper是由一个客户端和服务器组成的解决方案,客户端节点定期检查Puppet服务器中本地的配置是否需要更新。
- Ansible是一个简洁的部署解决方案;无代理架构确实让事情变得简单,Ansible也关注于幂等的配置描述符。
- httpd,systemd这些是什么功能?
- PalletOps是一个高级的部署系统,它结合了Lisp表意的能力以及一个轻量级的配置服务器。
- Chef是Opscode开发的基于Ruby的部署系统。可以用curl命令来下载chef的安装器。(omnibus)
- SaltStack是一个基于Python的部署解决方案。
- Salt的配置文件使用.yml文件,和Ansible类似。
- Vagrant是一个虚拟机的配置管理系统。它面向开发人员创建虚拟机,但是也可以用于其他目的。
- 我们可以使用云计算提供商,比如AWS或者Azure,也可以使用自己内部的云计算解决方案,如VMware或者OpenStack。
chap8 监控代码 127/200
- Nagios监控服务器整体运行状况的解决方案。
- Munin用来描绘服务器统计数据如内存使用,对于理解服务器整体的健康很有帮助。【因为健壮性和易用性,Munin是个不错的工具。】
- Ganglia是大型集群的绘图和监控解决方案。
- Graphite在功能上与Munin和Ganglia类似。但是它使用了自己的时间序列类库Whisper,而非RRD,与Munin和Ganglia不同。
- 日志处理
- ELK(Elasticsearch、Logstash和Kibana。)
- 不同的日志优先级,比如Debug、Warning、Trace和Error。
- 客户端日志类库
- Log4j是一个流行的Java日志框架
- 针对C语言的Log4c
- 针对JavaScript的Log4js
- 针对微软.NET框架的Apache log4net
- Apache Commons Logging或者Simple Logging Facade for Java(SLF4J)。这些框架的目的是为了让你可以使用单一的接口,并在有需要的时候替换底层日志系统实现。
- Logback为log4j的继任者而生,兼容ELK。
- 130/200
chap9 问题跟踪 151/200
- 问题跟踪器用来帮助处理敏捷流程的各种细枝末节。处理的内容可以是工作细目、缺陷和问题。
- 我们需要从问题跟踪器里得到什么?
- 需要处理的数量?
- 需要多少许可证?
- 有性能限制吗?
- 有什么可选的支持,质量如何?
- 我们能不能使用外部的问题跟踪器?
- 问题流程系统满足我们的需求吗?
- 问题跟踪器支持我们选择的敏捷方法吗?
- 这个系统与企业的其他系统集成是否容易?
- 跟踪器是否可扩展?
- 跟踪器是否提供多项目支持?
- 问题跟踪器是否支持多客户端?
- 问题跟踪器激增所带来的问题
- 开发、质量保证、运维三个团队用了三种不兼容的问题跟踪器。
- 在wiki上搜索
Comparison_of_issue-tracking_systems
- Bugzilla是被设计来支持面向公众的大型跟踪器
- Redmine是一个全功能项目管理工具的例子
- GitLab由于简单并集成了Git而选中
- 还有因为易用性而选择了Jira
- 但这是唯一收费的
- Trac是一个非常容易安装和测试的问题跟踪器。
chap10 物联网和DevOps 185/200
- 爱立信提供的
IoT_Comic_Book.pdf
- DevOps的物联网设备动手实验室
- 以
NodeMCU Amica
可编程小设备为例
- 以
收获
- 基本全体系的内容是知道的,也搭建过docker环境,也用过jenkins和Bugzilla这些工具,但全部串起来,还是这本书给了不少知识点。
- 但只是一本概念书,书中的工具和文档,还需要自己下载和看官方文档呢。