持续交付发布可靠软件的系统方法(部署流水线)第七章:提交阶段
《持续交付发布可靠软件的系统方法》读书笔记
提交阶段的运行应该少于5分钟,一定不要超过10分钏提交阶段的首要目标是创建可部署的产物
提交阶段的原则与实践
提供快速有用的反馈
何时令提交阶段失败
编译错误
测试失败(包括单元覆盖率低于60%)
精心对待提交阶段
提交阶段中有构建用的脚本和运行单元测试、静态分析等脚本。
随着项目的进行,不断改进提交阶段的脚本的质量、设计和性能
确保将脚本做成模块化,将那些经常使用且很少变化的常见任务与需要修改的任务分开
将部署流水线中不同阶段所用的代码分别写在不同脚本中
不要写出与具体环境相关的脚本,即要把具体环境配置与构建脚本分离
让开发人员也拥有所有权如果必要的话,即使是很普通的变更也都应该由开发人员和运维人员来执行
在超大项目团队中指定一个构建负责人
监督和指导对构建的维护
鼓励和加强构建纪律
在团队开始接触持续集成时,构建纪律还没建立起来时,提醒作用
团队成员轮流当,比如每星期轮换一次
提交阶段结果提交阶段的输入是源代码,输出是二进制包和报告(测试结果和代码分析报告)
制品库
制品库仅保存某些版本,而不是全部。如果在部署流水线某个 ...
持续交付发布可靠软件的系统方法(部署流水线)第九章:非功能需求的测试
《持续交付发布可靠软件的系统方法》读书笔记
性能、吞吐量、容量概念性能:对处理单一事务所花时间的一种度量,既可以单独衡量,也可以在一定的负载下衡量。吞吐量:系统在一定时间内处理事务的数量,通常它受限于系统中的某个瓶颈容量:一定的负载下,当每个单独请求的响应时间维持在可接受范围内时,系统所能承担的最大吞吐量。非功能性:有效性、容量、安全性、可维护性等。
非功能需求管理将非功能需求与功能需求一样对待。
创建一些具体任务来管理非功能需求
有必要的话,向功能需求中加入非功能需求的验收条件
如何为容量编程
为何要做容量测试高德纳著名格言:在97%的时间里,我们都应该忘记那种小的效率提升:过早优化是所有罪恶之根。然而,我们也不能让另外非常关键的3%的机会与我们擦肩而过。一个优秀程序员不会因为这个原则而对其置之不理,他们非常聪明,只会在识别出那段关键代码后,才会非常细心地去查看。在找到解决方案之前,必须先找出问题的根源。容量测试会告诉我们是否存在问题,以便我们可以修复它。不要枉自猜测,而要先进行度量。
解决容量问题现代软件系统中,最昂贵的是网络通信或磁盘存储,在性能和应用程序的稳定性方面,跨进程 ...
持续交付发布可靠软件的系统方法(部署流水线)第五章:部署流水线解析
《持续交付发布可靠软件的系统方法》读书笔记
什么是部署流水线部署流水线是指软件从版本控制到用户手中这一过程的自动化表现形式。价值流图
产品可行性评估
产品探索
产品计划与评估
开发
最后测试与审核
发布
3天
1周
7天
10天
10天
10天
3天
7周
1周
2天
2小时
开发到发布的流水线:会有很多次构建通过这一流程走向最后的发布
流水线各个阶段:交付团队->版本控制库->构建和单元测试->自动化验收测试->用户验收测试->发布
一般而言,只要某个构建使这个流程任一阶段失败,都会停止,不会进入下一个阶段。
提交阶段【自动化测试(主要是单元测试),代码分析】
自动化验收测试阶段【功能与非功能测试】
手工测试阶段【对自动化测试的补充,探索性测试,集成测试等】
发布阶段【部署到生产环境或试运行环境】
最基本的部署流水线
部署流水线的相关实践
只生成一次二进制包。对于不需要编译的语言,二制包指的是所有源文件的集合。这些二进制包应保存在文件系统的某个位置,让流水线后续阶段能够轻松访问到,但不要放在版本控制库中。二进制包应与 ...
持续交付发布可靠软件的系统方法(部署流水线)第八章:自动化验收测试
《持续交付发布可靠软件的系统方法》读书笔记
验收测试通常是在每一个通过提交测试的软件版本上执行的。
验收测试的目的:对于一个单独的验收测试,它的目的是验证一个用户故事或需求的验收条件是否被满足。如功能验收条件和非功能验收条件。
如果每次提交测试后都在该版本上运行自动化验收测试,会有如下效果:
反馈环大大缩短,能够更快地定位问题
测试、开发人员和客户需要紧密合作才能创建一个良好的自动化测试套件,这会促进他们之间的良好合作
有助于让每个人更关注业务的价值
验收测试与单元测试的区别:验收测试是针对业务的,单元测试是面向开发的。
创建验收测试
分析人员与测试人员和客户紧密合作,定义验收条件
分析人员向开发人员讲解需求,以及它的业务上下文,并检查一遍验收条件
测试人员与开发人员讨论,并就“哪些自动化验收测试来证明验收条件被满足”达成一致
开发人员认为工作完成是指所有单元测试和组件测试通过,验收测试全部实现,并证明系统满足需求。此时可以向分析人员、测试人员和客户进行演示
应用程序驱动层应用程序驱动层是一个知道如何与应用程序打交道的层次。它所用的API是以某种领域语 ...
持续交付发布可靠软件的系统方法(部署流水线)第六章:构建与部署的脚本化
《持续交付发布可靠软件的系统方法》读书笔记
##构建工具概览
Make
Ant
NAnt与MSBuild
Maven
Rake
Buildr
Psake
构建部署脚本化的原则与实践
为部署流水线的每个阶段创建脚本
使用恰当的技术部署应用程序
使用同样的脚本向所有环境部署
使用操作系统自带的包管理工具
确保部署流程是幂等的
部署系统的增量式演进
部署脚本化
多层的部署和测试
层
配置
应用/服务/组件
应用配置
中间件
中间件配置
操作系统
操作系统配置
硬件
硬件
测试环境配置 部署前对基础设施做标准冒烟测试,如果发现问题,就让环境配置流程快速失败,并给出测试结果
确认能从数据库中拿到一条记录
确认能连上网站
断言消息代理中的已注册的消息集合是正确的
透过防火墙发送ping,证明线路通畅
推荐策略
总是使用相对路径
消除手工步骤
从二进制包到版本控制库的内建可追溯性二进制包记录版本信息,如Java应用可以在MANIFEST中包含元数据,另外可以将构建流程生成的每个二进制包的MD5值及名字和版本标识符一起放在数据库中
不要把二进制包作为构建的一部分 ...
持续交付发布可靠软件的系统方法(部署流水线)第十章:应用程序的部署与发布
《持续交付发布可靠软件的系统方法》读书笔记
引言发布到生产环境和部署到测试环境的差异应该被封装在一组配置文件中,遵循一样的部署过程。启动自动部署系统,将要部署的软件版本与环境名称告诉它,点击开始,后缀部署与发布使用相同的流程。我们需要有一个列表,其中包含能够部署到每个环境的所有构建,并且只要通过点击就可以选择一个软件版本向某个环境进行自动部署。同时这种方式是对环境修改的唯一途径(包括对操作系统和第三方软件配置的修改)。
创建发布策略(文档)
每个环境的部署由发布由谁负责
创建一个资产和配置管理策略
部署时所用的技术的描述。运维团队与开发团队应对其达成共识
实现部署流水线的计划
枚举所有的环境,包括用于验收测试、容量测试、集成测试、用户验收测试的环境,以及每个构建在这些环境中的移动过程
描述在测试和生产环境中部署时应该遵循的流程,比如一个变更申请,及申请授权等
对应用程序的监控需求,包括用于通知运维团队关于应用程序相关状态的API和服务
讨论部署时和运行时的配置方法如何管理,以及它们与自动化部署流程是如何关联在一起的
描述应用程序如何与所有外部系统集成
如何记录日志详情,以便运维人员能够 ...
测试工具汇总
压力测试JmeterJmeter简单介绍与搭配Jenkins实现自动化测试实践使用JMeter进行负载测试——终极指南
LocustLocust学习总结分享性能测试工具LocustLocust 系列教程
LoadRunnerUsing LoadRunner with Jenkins
接口测试Robot FrameworkRobot Framework 在 Jenkins 上的自动化测试
系统僵尸进程管理
查看系统僵尸进程数top
查看僵尸进程详情ps -ef|grep defunct
停止僵尸进程kill -9 $Parent PID
系统性能测试与监测工具汇总
综合能力性能测试(Unixbench)1[root@localhost] $ ./Run
计算查看当前CPU负载(uptime)1[root@localhost] $ uptime
测试单cpu计算能力(bc)1[root@localhost] $ time echo "scale=5000;4*a(1)" | bc -l -q
内存查看当前内存使用的情况的状态(free)1[root@localhost] $ free -m
进程对内存的占用情况(pmap) 1[root@localhost] $ pmap -d 35713 # 查看进程35713占用内存的情况
磁盘磁盘IO测试(dd)测试磁盘的IO写速度
1# time dd if=/dev/zero of=test.dbf bs=8k count=300000 oflag=direct
测试磁盘的IO读速度
1# dd if=test.dbf bs=8k count=300000 of=/dev/null
表示每次写入/读取8k的数据,执行300000次
实时查看各磁盘的io(iostat)12[ ...
通过跳板机代理将本地文件传输到远端服务器
通过-J参数指定跳板机123$ ssh -J user@<bastion:port> <user@remote:port>// scp$ scp -J user@<bastion:port> sourcefile <user@remote:port>:
在.ssh/config中配置123456789101112### The Bastion HostHost jump HostName 10.2.3.2 Port 3022 User jump### The Remote HostHost remote HostName 172.32.2.7 Port 22 User root ProxyJump jump
使用普通参数就可以实现跳转12$ ssh remote$ scp <sourcefile> remote:/data/