[转] 持续集成与持续交付备忘录

URL  :   http://blog.csdn.net/hunterno4/article/details/22525667

一本好书使您改变。它将改变您的思想,您看待问题的角度和方式,最终,它将改改您的行为。然而,所有具有重要意义的改变都不会是在一夜之间发生的,如果您相信这种变革必会发生,不妨朝着这个方向去努力,经常改变,每次改变一点点。

——《持续集成:软件质量改进和风险降低之道》

CI的价值:

减少风险:缺陷的检测与修复变得更快;通过持续测试与持续审查,软件的健康程度可以测量;可以减少不实的假定。

减少重复过程

在任何时间、任何地点生成可部署的软件

增强项目的可见性

对开发团队的软件产品建立起更强大的产品信心

CI的阻碍:

增加了维护开销

团队变化太大

失败的构建太多

额外的软硬件成本

团队中7项好的CI实践:

经常提交代码

不要提交无法构建的代码

立即修复无法集成的构建

编写自动化的开发者测试

必须通过所有的测试和审查

执行私有构建

避免签出无法构建的代码

持续构建:

每次代码变更均进行自动化构建

将构建过程控制在单行命令下

将构建脚本从IDE中分离,避免与IDE产生耦合

集中放置软件资产

创建一致的目录结构

让构建快速失败

针对所有环境构建

使用专门的集成构建计算机

使用CI服务器

执行快速构建:分离较慢的构建,让集成构建少于10分钟

分阶段构建

持续数据库集成:

进行数据库自动化集成

使用本地数据库沙盒

将数据库资产放入版本控制库

让开发者能够修改数据库

让开发者成为开发团队的一员

持续测试:

线性系统的可靠性是每个系统组件的可靠性的乘积,因此特别需要保证底层组件的可靠性

进行自动化单元测试、组件测试、系统测试、功能测试,优先运行测试速度快的测试

为缺陷编写测试

让测试组件可以重复

尽量将测试限制为一个断言

进行代码持续审查,对代码的复杂度、耦合度、重复度等进行持续审查(sonarQube)

持续部署:

为每一个构建打上标签

执行测试

创建构建反馈报告

回滚构建的过程能力

持续反馈:

不要让您的团队习惯于忽略来自CI构建过程的消息

需要尽快反馈:持续集成的核心是减少缺陷引入、发现和修复之是的时间间隔

《持续交付:发布可靠软件的系统方法》

软件交付:

每次修改都应该触发反馈流程

必须尽快接收反馈

交互团队必须接收反馈并作出反应

无论部署到什么样的目标环境,都使用相同的部署方法

软件交付的原则:

为软件的发布创建一个可重复且可靠的过程

将几乎所有的事情自动化:配置管理自动化、验收测试自动化、数据库升降级自动化,对于硬件可采用虚拟化技术和像puppet这样的工具支撑自动化

将所有的东西都纳入版本控制

提前并频繁地做让你感到痛苦的事

内建质量:一旦发现缺陷,就要马上着手修复,交付团队中的每个人都应该对应用程序的质量负责

Done意味着已发布

交付过程是每个成员的责任

持续改进:团队应定期召开会议,反思过去的一段时间哪边做得好,哪边需要改进。

配置管理:

对所有内容进行版本控制,包括应用程序的软件、硬件及基础设施,与项目相关的所有东西都在版本控制库中(但是不推荐将源代码编译后的二进制文件也纳入版本控制中)

频繁提交代码到主干,尽量减少分支

使用意义明显的提交注释

以对待代码的方式来对待你的系统配置,使其受到正常的管理和测试

将特定于测试环境或生产环境的实际配置存放于与源代码分离的单独代码库中

应该严格控制生产环境,进行变更过程管理

高效配置管理策略:将二进制文件与配置信息分离;将所有的配置信息保存在一处。

基础设施应该具有自治特性,且非常容易重新搭建

保证配置管理是声明式且幂等的,即无论基础设施的初始状态是什么样,执行了配置操作后,基础设施或系统所处的状态就一定是你所期望的状态。

如果版本控制系统允许,尽量选择乐观锁(编辑本地工作副本的一个文件时不会阻止其它成员对其进行修改)

康威法则:设计系统的组织不可避免地要产生与其组织的沟通结构一样的设计,即由都坐在一起的小团队开发出来的产品更趋向于紧耦合、非模块化特点

持续集成:

 

一、良好的实践:

构建失败之后不要提交新代码

提交前在本地运行所有的提交测试,或者让持续集成服务器完成此事

等提交测试通过后再继续工作

回家之前,构建必须处于成功状态

时刻准备着回滚到前一个版本

回滚之前规定一个修复时间

不要将失败的测试注释掉

为自己导致的问题负责

测试驱动的开发

二、推荐的实践:

极限编程开发实践

若违背架构原则,就让构建失败

若测试运行变慢,就让构建失败

若有编译警告或代码风格问题,就让测试失败

测试策略:

 

一旦同一个测试重复做过多次手工操作,并确信不会花太多时间来维护时,就要把它自动化

单元测试不应该访问数据库、使用文件系统、与外部系统交互

尽可能频繁地向客户演示功能

建立一些基本的非功能测试,如容量测试、安全性测试。

提交测试应该避免复杂的数据准备,而是用尽量少的测试数据来断言被测试的单元正确地完成了所期望的功能

尽可能使用应用程序的公共API为测试创建正确的初始状态

部署流水线:

只生成一次二进制包,并将生成的二进制包存入于制品库中,之后的测试、部署均基于此二进制包

对不同环境采用同一种部署方式

对部署进行冒烟测试,这个冒烟测试还应该检查一下应用程序所依赖的服务是否都已启动

向生产环境的副本中部署,即先向类生产环境中部署

每次变更都要立即在流水线中传递

只要有环节失败,就停止整个流水线

为尽快加快反馈过程,增加提交阶段的测试

通常都应该使用增量的方法来实现部署流水线:构建、部署、单元测试、代码审查、验收测试、发布等步骤,部署流水线也应该不断变化,不断改善与重构

做整体优化,不断缩短周期时间,即修改一行代码到最终部署至线上并生效的时间

确保构建时尽量使用相对路径

应该尽量将需要管理的构建数量最少化

验收测试:

写应用程序验收条件时必须想着如何使其自动化,并遵循INVEST原则(independentnegotiable valuable estimable small testable)

尽量与GUI解耦

尽量使测试具有原子性,即与测试的执行顺序无关

单个测试范围内,应该避免所有异步情况,也要避免跨越测试边界情况

尽早修复失败的验收测试

当验收测试时间需要很长时,考虑使用虚拟化技术进行多环境并行测试

进行容量测试,但需要先进行度量,找到解决方案之前,必须先找出问题的根源,过早的优化是所有罪恶的根源

对于容量测试环境可以采用缩放后的类生产环境,而不是整个集群

把自动化容量测试作为部署流水线中的一个完成独立的阶段

部署与发布:

 

真正执行部署操作的人应该参与部署过程的创建

记录部署活动

不要删除旧文件,而是移动到别的位置

部署是整个团队的责任

服务器应用程序不应该有GUI

为新部署留预热期

快速失败

不要直接对生产环境进行修改

1
0
时间: 2024-11-07 12:34:09

[转] 持续集成与持续交付备忘录的相关文章

在TFS持续集成(持续发布)中执行Telnet任务

Telnet是一种在因特网或局域网上使用虚拟终端连接,提供双向交互式文本通信设备的协议. 它是最早的互联网通讯协议之一.自1969年启用以来,已经经过了将近50年时间,在开放式的操作系统中拥有广泛的用户. 虽然由于其安全性的弊端,已经逐渐被淘汰,但是在许多AIX系统的服务器上,运维人员都习惯使用Telnet作为自己的主要工具,维护服务器系统.TFS系统作为应用软件生命周期管理(ALM)平台的产品,原生提供SSH工具连接Linux系统,可惜没有提供Telnet的工具,这里我介绍如何使用Ant中的T

3、Jenkins持续集成之持续集成

3.Jenkins持续集成之持续集成.md 配置ansible实现无密钥交互 安装阿里云YUM源码 [[email protected] ~]# cat <<EOF>>/etc/yum.repos.d/epel.repo [epel] name=epel for aliyun baseurl=https://mirrors.aliyun.com/epel/7/x86_64/ enabled=1 gpgcheck=0 [os] name=os for aliyun baseurl=h

持续集成与持续部署宝典Part 1:将构建环境容器化

介   绍 随着Docker项目及其相关生态系统逐渐成熟,容器已经开始被更多企业用在了更大规模的项目中.因此,我们需要一套连贯的工作流程和流水线来简化大规模项目的部署.在本指南中,我们将从代码开发.持续集成.持续部署以及零停机更新几个方面进行介绍.在大型组织中,这已是相当标准的工作流:但在本系列文章中,我们会更着重于探讨在容器时代,如何在基于Docker的环境中复制这些工作流.另外,我们还将详细介绍如何利用Docker和Rancher自动化处理这些工作流.在本指南中,我们提供了每个步骤的详细示例

持续集成与持续部署宝典Part 3:创建集成环境

通过前两篇文章<持续集成与持续部署宝典Part 1:将构建环境容器化>和<持续集成与持续部署宝典Part 2:创建持续集成流水线>,我们使用Docker创建了一个集中管理的构建环境,它可以应用到任意数量的机器上.接着,我们将环境设置到了Jenkins CI上,自动化处理了源代码的持续构建.打包和测试.在本章中,我们将进一步对流水线进行研究(如下所示),了解如何将项目持续部署到一个长时间运行的测试环境中.除了自动验收测试外,它还将允许人工测试代码.有了这样的环境,你就可以在产品投入生

持续集成与持续部署宝典Part 4:创建持续部署流水线

随着Docker项目及其相关生态系统逐渐成熟,容器已经开始被更多企业用在了更大规模的项目中.因此,我们需要一套连贯的工作流程和流水线来简化大规模项目的部署. Rancher Labs准备了此持续集成与持续部署系列文章,共两万余字,希望能供企业参考如何利用诸如Docker和Rancher这类工具来创建属于企业的持续集成和持续部署流水线,并根据自己的实际情况和需求在这CI/CD流水线中也加入自定义的流程. 本文是此系列文章的最后一篇,我们将在本文中完成创建持续部署流水线的最后工作.本文内容包括创建持

Jenkins+Maven+Svn搭建持续集成环境持续集成和自动部署

Jenkins和Hudson有很深的渊源,Jenkins目前更新频繁,目前选用Jenkins为持续集成工具和自动部署 Jenkins的使用有很多的介绍,主要记录如下要点: 192.168.1.240:Tomcat: /usr/local/share/apache-tomcat-6.0.37/ 访问端口8186 Jenkins: /usr/local/share/apache-tomcat-6.0.37/webapps/Jenkins访问地址: http://192.168.1.240:8186/

教您一步一步利用Jenkins构建持续集成,持续交付环境CI/CD

第一步下载Jenkins环境 去Jenkins官网下载安装包:https://jenkins.io/zh/download/ 然后下一步傻瓜式安装 (1)安装插件,默认提供了一些插件,不管他全部安装 (2)下一步创建一个账号: (3)下一步是这样一个画面:   选择管理插件,在管理插件中,安装: Subversion Plug-in MSBuild Plugin Publish Over FTP 全局管理: 配置svn: 原文地址:https://www.cnblogs.com/NBIDataV

04: CI(持续集成)/CD(持续交付/持续部署)

1.1 持续集成.持续交付 介绍   参考博客:https://www.cnblogs.com/cay83/p/8856231.html 1.传统交付 1. 传统软件的开发与交付的周期都很漫长,从需求的分析.系统的设计.编写测试用例.系统开发.单元测试.组装测试到交付调试. 2. 每一次交付.升级,都需要提供基础的硬件.软件的环境.软件的代码.软件的文档与手册. 3. 工程师都按照之前预演过好多遍的流程,对照着系统的部署手册,一步一步的组装硬件,安装软件,稍有差池,就要按照对应的应急预案进行回滚

[首发]国内某大型银行的持续集成与交付实践

一.背景 随着架构的不断演进以及微服务技术在我行的深入应用,应用部署发布的复杂性大大增加,简单的代码配置管理模式.人工的版本记录及手工部署等发布操作和管理的模式,效率低.操作风险较大,因此急需从整体上提升我行软件持续交付的能力,降低应用部署发布的操作风险.通过引入构建自动化及可视化的软件交付流水线,整合从开发.构建.测试.部署.发布.运维等多个环节,加强各职能团队协助和沟通,全面实现项目构建持续自动化管理. 二.实施方法 1. 总体架构 DevOps是一组能够帮助软件开发团队极大的提高其软件交付