低代码到底是不是行业毒瘤?一线大厂怎么做的?戳此了解>>> 了解详情
写点什么

2011,持续集成理想照进现实

2012 年 1 月 21 日

持续集成的理念在我们国内已经深入人心,很多软件企业已经自发或者在持续集成教练的带领下,为自己的项目和产品搭建起日趋成熟的持续集成平台,改进团队软件开发过程和协作,提高系统质量,为软件上线和发布提供保障,增强信心。

在 2011 年,持续集成领域所涉及的理论和实践也开始发生变化,尤其作为行业内事实上的实践指导标准——Martin Fowler 的持续集成论文发布了第二个版本。ThoughtWorks 高级咨询师肖鹏为此撰写了《持续集成理论和实践的新进展》,其中值得关注是对持续集成成熟度模型的阐述,为指导和建设持续集成能力建立了可以参照的标杆。

在 2011 年 InfoQ 推出的持续集成专题内容中,最为重要的就是来自百度的也是《持续交付》的作者乔梁撰写的持续集成专栏。他通过角色扮演和故事推进,用多篇幅内容详细描述了持续集成实践的方方面面,内容涉及分支策略、依赖管理、自动化部署等八个方面,而且还未结束。

尽管 Thoughtworks 的首席科学家 Martion folwer 为“持续集成 ”下了定义,但由于自身背景与经历的不同,每个人对其都有不同的理解。从狭义上讲,持续集成可以认为是一种基于某种或者某些变化对软件系统进行的经常性的 构建活动(注:这里的构建活动不仅指编译打包工作,还包含各类自动化测试、部署及发布活动)。然而,它忽视了一点,即:任何实践中都应该包含“与人的交 互”这一因素。因此,从广意上讲,持续集成应该是软件开发团队在上述活动的约束下所采用的整个开发流程及活动。它强调开发团队与持续集成系统之间的互动性。我们既见过持续集成做得非常成功的团队,也见过效果不佳的持续集成,甚至失败的案例。

那么,到底如何从持续集成中得到最大的收益呢?这要从持续集成所涉及的诸多方面进行分析,并根据团队具体情况(比如团队规模、人员组成以及是否为分 布式团队 等)及所开发软件自身的特点(是企业应用软件,还是中间件?是嵌入式软件,还是互联网产品等)制定实践策略与实现步骤。本专栏将与大家共同探讨与持续集 成、持续部署及持续交付相关的方法、工具与经验。作者本人在 Thoughtworks 公司曾参与的一款持续集成与发布管理产品 Go 的交付和对外咨询服务为 专栏提供了很有素材。

持续集成中的一个实践是自动化测试,包括自动化单元测试、功能测试、集成测试等等。Ranjan D Sakalley 在他的《测试自动化和持续交付》一文中重点阐述了他认为自动化测试在持续集成中的重要性,

软件测试和验证是细致活也是辛苦活,需要模仿最终用户尝试各种用法和输入场景、比较并断言所期望的行为。而这些细致的辛苦活是可以让计算机程序去做的。自 动化测试套件中那些可编程部分对于大规模软件交付是非常有帮助的。在我做过的大部分项目里,有些测试是可以自动化的,也有些不能。不过,只要有自动化测试 套件,我的团队都将倚重于它,而将精力集中在那些没有自动化的功能测试。而且,自动化测试还让我们能够满足客户快速变化的需求,并使我们达到了一个更高的层次,使得每次构建(即使只是微小变动)都是经过测试和验证的稳定版本。正如 Jez 有关持续交付的文章中所言,自动测试“让交付团队超越了基本的持续集成”并走上持续交付的康庄大道。实际上,我觉得自动化测试是非常重要的,如果你要实践持续交付,就必须在自动化测试上进行投入。

国内著名的 Maven 技术专家许晓斌在他的 Maven 实战专栏中,描述了完全由 Maven 驱动持续集成的可行性,用经验证明用得好自己工具箱里称手的工具,胜过一切理论。

持续集成是敏捷最重要的实践之一,但如何在基于 Maven 的环境下实践持续集成却鲜有文章详述,本文介绍了一些该主题的最佳实践,包括架设私有仓库、使用正确的集成命令、利用 Profile 等技术处理分阶段构建等等。

2012 年 1 月 21 日 02:221557
用户头像

发布了 127 篇内容, 共 37.0 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

传统数仓如何转型大数据

数据社

大数据 数据仓库 七日更

智慧旅游安全管理综合指挥平台建设解决方案

WX13823153201

架构师训练营第 1 期 - 第 11 周 - 命题作业

wgl

极客大学架构师训练营

灵魂一问:数据库连接池到底该怎么配?

Gopher指北

golang MySQL

从根上理解高性能、高并发:深入计算机底层,理解线程与线程池

程序员小毕

Java cpu 多线程 高并发 线程池

Spring Cloud 2020.0.0正式发布,再见了Netflix

YourBatman

Spring Cloud Spring Boot netflix 2020.0.0

手写线程池,对照学习ThreadPoolExecutor线程池实现原理!

小傅哥

Java 小傅哥 线程池 七日更 ThreadPoolExecutor

都 2021 年了,Serverless 能取代微服务吗?

Serverless Devs

Serverless 微服务 运维 云原生 后端开发

如何在 20 分钟内给你的 K8s PaaS 上线一个新功能?

阿里巴巴云原生

阿里云 容器 运维 云原生

如何阅读别人的源码

熊斌

学习 Code Review 源码阅读 七日更

引领云原生发展浪潮 阿里云开启云原生大规模落地元年

阿里巴巴云原生

云计算 阿里巴巴 阿里云 最佳实践 云原生

XRP瑞波币系统软件开发|XRP瑞波币APP开发

开發I852946OIIO

系统开发

夜莺二次开发指南-监控系统(2)

qinyening

滴滴夜莺 夜莺监控

Android uni-app实现音视频通话

anyRTC开发者

uni-app android 音视频 WebRTC 跨平台

社区一体化综合平台搭建,智慧平安小区建设解决方案

t13823115967

智慧城市 智慧平安社区平台建设

执法监督信息化建设,公安情报指挥一体化合成作战系统开发

t13823115967

智慧公安

LeetCode题解:42. 接雨水,暴力法,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

30G 上亿数据的超大文件,如何快速导入生产环境?

楼下小黑哥

Java MySQL 并发编程 线程池

任务发布系统软件开发|任务发布APP开发

开發I852946OIIO

系统开发

揭开阿里巴巴复杂任务资源混合调度技术面纱

阿里巴巴云原生

云计算 阿里云 性能优化 云原生 资源调度

判空使用isEmpty()方法真的可行吗?

田维常

Java

深度探索Hadoop分布式文件系统(HDFS)数据读取流程

读字节

hadoop hdfs 大数据技术 大数据架构 分布式文件系统

Go中的Channel背后的设计哲学

soolaugust

go Go Concurrency Patterns 七日更 CSP

最有技术含量的面试

escray

面经 面试经历 101次面试 七日更 十日谈

现代JavaScript:ES6+ 中的 Imports,Exports,Let,Const 和 Promise

Geek_Willie

Java ES6

打开数“智”化之门,一字之差带来的思考

京东科技开发者

DevOps IoT 新基建 智能

高性能MySQL

田维常

MySQL

生产环境全链路压测建设历程 18:某快递 A 股上市公司的生产压测案例之中篇

数列科技杨德华

全链路压测 七日更

MySQL字符集修改实战教程

Simon

MySQL 字符集 七日更

如何破解AI数据困境?京东智联云联邦学习平台有良方

京东科技开发者

人工智能 大数据 学习

Serverless 是一种思想状态

Serverless Devs

Java Serverless 运维 云原生 后端开发

2021 ThoughtWorks 技术雷达峰会

2021 ThoughtWorks 技术雷达峰会

2011,持续集成理想照进现实-InfoQ