`
chelsea
  • 浏览: 119423 次
  • 来自: ...
社区版块
存档分类
最新评论

持续集成: 流程指南

    博客分类:
 
阅读更多


/**
* 本没有流程, 公司采用CMMI, 要求有个流程, 就写了一个
*/


Continuous Integration Process Guide

持续集成实施指南


像" 版本控制", "配置管理"一样, "每日构建", "持续集成(Continuous Integration, 简称CI)"等实践也成为现代软件开发的必备配置. 一个好的CI环境, 能够让你实时监控软件的开发状态, 随时获得可工作的软件版本, 能够提供给开发团队,管理团队,甚至市场人员快速而有效的反馈. 没有实施CI的项目, 就像黑夜中失去联系的列车, 可能凑巧能够到达目的地, 但大多数时间不知身在何处, 将驶向何方.

好的CI环境并不是唾手可得的, 但也并非无章可循. 从2001年ThoughtWorks发布第一个CI工具CruiseControl起, 近7年的时间里, 软件开发领域涌现出了大量成功的CI实践, 以及应该避免重蹈的覆辙. 一个新的项目团队应该如何从无到有的实施CI, 这个流程已日渐清晰.


一次实施过程按时间的先后顺序, 大致可分为团队组建, 现状调研, 实施, 验收, 及后续维护等几个步骤.


一. CI团队组建

先来看一下软件开发过程中, 其它相关实践的团队组成. 以配置管理为例, 通常我们会有专门的人员负责配置库的创建, 权限的分配, 分支的管理, 等等. 他们同时负责相关工具的选择, 配置策略的制定, 以及培训手册的编写等等. 这样我们的开发团队就可以把精力集中在产品开发上, 各司其职. 以我司为例, 我们选择ClearCase作为配置管理工具, 有专人负责配置库/权限/分支的管理, 而我们的开发人员只需要简单的使用客户端工具来完成日常操作即可.

另一个例子是网络管理. 拓扑结构的制定, 地址/帐号分配, 数据的备份等, 都由专业的网管人员来完成. 开发人员只需要安心的在网管人员为他们创建的便利的网络环境中工作即可.

这是一种很好的模式. 每件事情都有专业的人员来完成, 开发人员可以把精力集中在他们擅长的领域, 即产品开发上.

与此类似, 持续集成也需要不同于软件开发的技能. 除了必要的开发经验外, CI更倚重实施人员的系统管理经验. 与其它实践唯一的不同在于, 持续集成与软件开发过程结合更紧密, 定制性更强. 因此, 我们建议循序渐进, 以点带面的培养专业的CI人员.

当然在实施的过程中, 仅仅依靠掌握了CI技能的人员是不够的. CI过程中牵扯到的任何一个步骤, 可能都需要更专业的人员配合. 每个人都不可能精通所有的工具. CI的按需定制性又极强. 尤其在实施的初期, 需要精通某个专有工具的专家给予足够的支持.


综上所述, 持续集成需要不同于开发人员的技能, 可以循序渐进的培养专业人员, 并在每个项目实施CI的过程中, 得到领域专家的配合.


二. 现状调研

我们反对一成不变的照搬已有的经验. 任何忽视现状的CI实施都是不可取的. 在每个团队中, 总有一些独特的, 强大的工具让你眼前一亮. 认真了解项目组目前的工作状况, 是成功实施CI的必备步骤.

在我们的培训教材中, 我们提到, CI的实施, 需要人和工具两个方面的因素. 在调研过程中, 我们也需要考虑这两方面的因素, 做出全面的评估.

1. 人, 或者说开发文化

评估检查列表:

是否编写单元测试, 或其它形式的自动化测试?
是否经常提交代码?
是否总是在提交代码前先从服务器上更新代码?
是否关心自己提交的代码会不会导致其他成员的代码构建失败?
是否所有的团队成员都在同一间办公室工作?

其中正面的回答将有利于提高CI环境给出反馈的速度和力度, 有利于减少在CI环境中失败的构建次数.

2. 工具

2.1 评估检查列表(自动化程度):

是否有无需人工干预的单元测试工具?
是否有无需人工干预的功能测试工具?
是否有无需人工干预的更多种类的测试工具?
是否有无需人工干预的代码质量检查工具?
是否有无需人工干预的部署工具?

这里强调"无需人工干预", 而不是简单的"自动化", 是想强调不仅仅需要能够自动化的启动运行, 而且需要保证在整个运行过程中无需人工干预. 比如说:

不能够在控制台中等待输入
不能够弹出对话框等待输入

2.2 评估检查列表(可集成性):

是否能够按照惯例在发生错误的时候返回非零值?
是否能够接受一定格式如Xml或纯文本格式的输入?
是否能够产生标准格式如Xml或HTML等易于集成的输出?
是否接受命令行参数?
是否支持标准协议控制如 HTTP, FTP ?
是否支持编程访问如 RMI, CORBA, SOAP, TCP?

在持续集成逐渐发展成熟的理论中, 一个叫做"Pipeline"的概念开始得到认同. 构建过程中的每一个步骤未必是一个孤立的步骤, 可能需要接受前一个阶段的输出作为输入, 并产生自己的输出作为下一个步骤的输入, 因此基于各种标准的输入输出支持是必要的. 专有格式并不适合任何一种集成环境.

2.3 评估检查列表(透明度):

是否能够产生自己的运行日志?
是否能够指定日志的磁盘位置和格式?

CI环境需要展示尽可能多, 尽可能有用的报告, 工具的自我报告直接影响最后的效果.

2.4 评估检查列表(环境依赖性):

是否能够在硬盘上的任何一个目录中运行?
是否不依赖于绝对路径?



三. 实施

实施过程是CI的重点, 直接关系到成功与否. 却也正是变化最多的一个阶段, 定制性都在这个阶段体现. 每个CI环境都有独一无二的特点. 没有什么好的方法, 依赖于团队的经验.

在这个过程中, 在大的方面上, 可以遵循下面的原则或实践:

使用配置管理来管理配置
使用一切手段, 让反馈更快
使用一切手段, 让反馈更有效
学习并积累可复用的CI最佳实践
培养团队成员的责任感, 将CI的反馈落到实处.


在这个过程中, 可能会遇到很多问题. 典型的问题如下:

1. 无法把某个步骤自动化: 认真分析一下原因. 通常这不是真的, 除非一个软件是完全封闭的, 没有任何可编程的接口供集成. 问题可能出在选择的工具上. 是否能够改进现有工具? 是否能够选择其它工具?

2. 需要集成多个源代码源: 尽量不要让两个不同组件的源代码直接依赖, 可以使用编译后的库作为媒介. 如果必须有源代码的依赖, 尽量让它们使用同一个源代码仓库. 如果依赖的源代码必须在另外一个仓库中, 尽量选用支持聚合的源代码控制系统, 如Subversion, 可以使用 svn:external 来将不同仓库中的代码聚合在一起.

3. 需要双向合并不同分支中的源代码: 确切来说, 这是配置管理的问题. 这只是配置管理带给持续集成环境的麻烦. 从配置管理的角度, 应该尽量避免创建这种需要双向合并的分支. 一旦发生这种情况, 最稳妥的办法还是开发者在本地完成合并, 然后运行私有构建, 构建成功后再提交到CI环境监控的源代码库中.


四. 验收

CI环境一旦建好, 就会被项目组的成员天天使用. 因此环境本身的质量好坏, 会直接影响到它在监控项目状况方面的效果. 我们有一些验收标准, 用于检查一个CI环境是否满足需求. 这个列表可以随时补充新的标准

1. 配置管理: 是否使用了配置管理来管理配置?
2. 环境无关: 是否易于移植? 是否从配置库中更新下来就能用? 或者拷贝到另外一台机器上就能用?
3. 自我管理: 是否能够自动更新配置? 是否无需重启即可令新配置生效?
4. 构建速度: 主要的构建是否能在几分钟之内完成?
5. 自动化程度: 是否自动化了所有的验证, 检查步骤? 是否即使发生错误也无需人工干预?
6. 问题定位: 是否能提供线索迅速定位到出错的代码行和开发者?
7. 历史记录: 是否能够下载最后一个可用的版本? 能够下载任何一个可用的版本?

一个最佳实践就是把整个 CI 环境提交到版本控制系统中, check out 到一台新机器就能用



五. 后续维护

项目的开发周期从几年到几个月不等, 而通常开始的几个星期内就会把CI环境搭好. 随着开发的进展, 必然会对CI环境有新的需求. 如何应对这些新的需求? 可以从组织管理和技术两个方面来考虑.

组织管理:
1. 即使有专业的集成团队, 但资源不充足的时候他们需要为更大范围的组织服务, 因此项目组内部需要有至少一位成员对环境比较了解. 这可以通过在前期和专业人员结对工作来实现.
2. 随着时间的推移, 熟悉持续集成的人员必然越来越多, 可能在每个项目组内都有人熟悉持续集成. 这也是我们想看到的结果. 这意味着我司已经建立起了一支有形或无形的专业的持续集成队伍. 这支队伍中的大部分人都能够解决自己项目组中简单的集成问题. 而少数更专业的人士可以进行更大规模, 集中式的CI平台规划或管理.

技术:
1. 所选用的CI工具必须是易于扩展的, 支持用户定制的. 必要时可以通过编写插件来满足新的需求.
2. 所选用的工具最好有可靠的支持, 或成熟的社区, 碰到问题可以寻求帮助.

 

分享到:
评论

相关推荐

    基于jenkins的持续集成使用指南.docx

    【基于Jenkins的持续集成使用指南】 持续集成是一种软件开发的最佳实践,旨在通过频繁的集成来减少集成中的问题,提高开发效率和软件质量。Jenkins作为一款开源的持续集成工具,为开发团队提供了自动化构建、测试和...

    持续集成php持续集成

    【持续集成PHP】是一种开发实践,它鼓励开发者频繁地将代码变更合并到主分支,以减少集成冲突并尽早发现潜在问题。...开发者可以通过这些文件来设置和维护一个高效的持续集成流程,确保代码质量和项目的稳定性。

    持续集成Jenkins配置指南.docx

    本配置指南详细阐述了如何使用Jenkins实现一套基于SVN、NuGet、MSBuild和FTP的持续集成流程。通过这个流程,你可以从SVN代码库拉取代码,利用NuGet获取项目依赖,通过MSBuild编译.NET应用程序,最后将编译结果通过...

    信息的系统安全系统集成服务流程.doc

    《信息的系统安全系统集成服务流程》文档详细阐述了信息系统安全集成从开始到完成的一系列工作流程,旨在规范作业过程,保障人身和设备安全,提升服务质量。以下将逐一解析各个关键环节。 1. **目的**:该流程的...

    持续集成与交付实践指南.pptx

    ### 持续集成与交付实践指南 #### 第1章 简介 **持续集成与持续交付**是现代软件开发领域中极为重要的概念。它们不仅有助于提高开发效率,还能显著提升软件产品的质量。 ##### 持续集成的定义与作用 **持续集成*...

    持续集成aci3.pdf

    此外,Hudson还提供了丰富的插件支持,可以根据项目需求定制个性化的持续集成流程。对于那些寻求提高软件开发流程的团队来说,采用Hudson结合Subversion进行持续集成无疑是一个值得考虑的选择。

    使用Hudson持续集成 ppt

    ### 使用Hudson持续集成知识点详解 #### 一、持续集成概念与价值 - **定义**:持续集成(Continuous Integration, CI)是一种软件开发实践,开发者经常将代码提交到共享存储库,每次提交后都会自动构建并进行自动...

    信息技术服务 服务管理 第2部分:实施指南.zip

    3. 实施步骤:指南可能会提供一个分步的实施过程,包括需求分析、现有流程评估、目标设定、规划、试点项目、全面部署和持续改进。 4. 最佳实践:书中可能包含一系列最佳实践案例,展示如何在实际环境中应用ITSM原则...

    持续集成框架整合说明

    随着软件开发流程的不断演化,持续集成(CI)已成为提高软件质量和开发效率的重要手段之一。本文将详细介绍如何利用Jenkins、Maven以及Sonar等工具搭建一套完整的持续集成框架,帮助读者理解CI的核心理念并掌握实际...

    GitLab + Jenkins服务器搭建指南:构建高效的持续集成平台

    本指南详细讲解了如何搭建GitLab和Jenkins服务器,实现高效的持续集成(CI)和持续交付(CD)平台。通过GitLab进行源代码版本控制,结合Jenkins的自动化构建与部署能力,帮助开发和运维团队自动化代码测试和部署流程...

    集成与构建指南

    - **持续集成过程说明**:重点阐述如何利用自动化工具支持持续集成的过程。 #### 构件的集成原则 - **生产者与消费者**:明确界定谁负责提供源代码或构件,谁负责消费并集成。 - **源码目录组织原则**:合理规划源...

    基于Hudson的持续集成指南

    【持续集成】(Continuous Integration, CI) 是一种软件开发实践,它强调开发...通过学习本指南,读者不仅可以理解持续集成的概念,还能掌握使用Hudson建立和维护CI环境的具体步骤,从而提升团队的开发效率和软件质量。

    持续集成-Maven-nexus-SNV-jenkins架构

    本文将深入探讨一种基于Maven、Nexus、Subversion(SVN)和Jenkins的持续集成架构,旨在为读者提供一个全面理解与应用该架构的指南。 ### 一、架构概述 #### 1.1 Subversion(SVN) Subversion是一种开源的版本...

    知识领域: DevOps 技术关键词: 自动化部署、持续集成、容器化 内容关键词: 部署流程、监控与日志、云计算 用途: 实现快

    技术关键词: 自动化部署、持续集成、容器化 内容关键词: 部署流程、监控与日志、云计算 用途: 实现快速、可靠的软件交付和运维流程,提高开发效率 资源描述: "Docker官方文档"包含了Docker容器技术的详尽说明和实用...

    IPD流程指南第3.0版

    ### IPD流程指南第3.0版:核心知识点解析 #### 一、IPD流程概述 - **定义**:IPD(Integrated Product Development)即集成产品开发,是一种系统化、结构化的开发流程,旨在提高产品开发效率和质量,缩短产品上市...

    自动构建持续集成技术

    本篇将深入探讨如何利用Jenkins实现自动构建持续集成,并特别关注于文档中提到的具体技术和操作流程。 #### 二、Jenkins自动构建操作 ##### 2.1 软件及资料下载 根据文档指示,用户需要从特定服务器下载一系列...

    工作流程指南.zip

    版本管理和持续集成/持续部署(CI/CD)实践有助于简化维护流程,提高效率。 通过以上六个阶段,一个完整的IT工作流程得以实现。理解并掌握这些步骤对于提升工作效率,保证产品质量至关重要。在实际操作中,敏捷开发...

Global site tag (gtag.js) - Google Analytics