持续集成工具的发展历程以及未来
作为DevOps流程中的一个重要组成部分,持续集成(CI)的目标是对开发团队的代码进行集成,包括代码的构建、单元测试与集成测试的执行,以及生成执行结果的报表等等。CI使开发团队无需将时间浪费在处理代码冲突的问题上,因此很多人将其视为敏捷软件开发的奠基石。
CI与持续部署(CD)过程通常是紧密联系在一起的。CD过程通过在管道中定义的步骤将由CI过程所生成的结果部署至集成、预发布乃至生产环境中。由于整个CD过程是“持续的”,因此一旦有代码签入源代码控制系统,后续过程就会自动进行测试、对代码进行构建、并将构建结果部署至目标环境中。它的优点显而易见:一方面,开发者可快速地收到bug与故障的通知,形成快速的反馈循环。另一方面,客户也将更快地使用你的新特性。
近日,Vassili van der Mersch在一篇博客文章中对各种环境中的CI工具进行了详细的比较,并分析了CI工具的未来发展。在后续的文章中,作者还将继续分析DevOps中的另一重要内容,即配置管理。
传统的CI工具
第一个正规的持续集成工具是于2001年所推出的CruiseControl,这是一个基于Java开发的开源软件。除了持续构建流程之外,它还提供了邮件通知、Ant以及对各种源代码控制系统的支持,并推出了支持.NET与Ruby的移植版本。尽管Jenkins后来居上,成为第一个得到广泛应用的CI工具,但CruiseControl已经具备了一个CI工具的基本功能,为CI过程的推广做出了很大的贡献。
Jenkins的出现与发展颇有传奇色彩,它的前身是由一位来自Sun公司的开发者川口浩介(Kohsuke Kawaguchi)于2004年开发的一个基于Java的CI工具Hudson。经过三/四年的发展后,它逐渐超越CruiseControl成为了最流行的CI工具。但自从Oracle收购了Sun之后,希望将Hudson作为收费的商业工具进行开发。以川口为首的开发者社区则决定以Jenkins的名义继续免费版本的开发。有趣的是,Hudson与Jenkins的开发者各自将对方视为自己的分支版本,而将自身视为正统。在2013年后,Jenkins的发展势头已有超越之势,它的每日提交次数远远地超越了Hudson,如今已成为市面上最流行的CI工具。
早期的Jenkins与其他传统CI一样,只支持本地托管。而现在已经有一些云计算平台推出了基于Jenkins的SaaS方案。这方面比较突出的有CloudBees,它所提供的方案是一种集成了CI与CD的混合方案,可通过Docker Pipeline插件提供对Docker容器的支持。
除了Jenkins之外,其他一些流行的CI工具还包括由JetBrains推出的TeamCity,以及由Atlassian推出的Bamboo等等。这些CI工具基本都提供了以下功能:
-
对源代码控制系统的支持,例如Git、Subversion、TFS等等。可以在代码控制的主线发生代码提交时自动触发后续的一系列步骤,例如构建、测试与部署等等。
-
对依赖管理工具的支持,如Java的Maven、NodeJS的NPM、Ruby的Gem,以及.NET的Nuget等等。
-
对各种类型测试的支持。早期的CI只支持单元测试,即单个对象或组件的功能验证。随后加入了对集成测试的支持,即对组件之间的通信与交互进行难。尽管如此,这还不足以验证系统确实按照用户期望的方式进行工作。因此现代化的CI工具开始支持功能性测试,将原先的手工测试替代为基于Selenium等工具的自动化测试。
云计算环境中的CI工具
曾在大规模企业中尝试过CI实践的开发者非常了解:代码的构建与测试的执行是一种非常消耗资源的操作,如果有多个团队使用同一个CI平台,那么这种情况将进一步加剧。近几年来,软件团队逐渐厌倦了本地托管的CI系统对时间与精力的要求。而基于云计算平台的SaaS解决方案的出现快速地弥补了这方面市场的缺失。
Travis CI是一个基于GitHub API所打造的托管CI服务,使用Travis CI有一个先决条件,即源代码需要在GitHub进行托管。Travis CI通过webhook对GitHub代码仓库中的各种变化进行响应,例如代码提交或pull request等等。Travis CI也依赖GitHub提供的服务对用户和组织进行认证。
使用基于云环境的CI系统让开发者得以从对本地CI系统的安装、配置过程中解脱,不必再关注于基础设施和用户认证与授权方面的问题。此外,由于大多数SaaS方案都提供了对应的API,因此整个工作流都可以实现API驱动。
基于云环境的CI系统还有另一大优势,他们通常会提供更多的测试功能,例如对不同浏览器与操作系统组合条件的测试。例如Travis就支持在Linux、Mac和Windows系统上的测试,并支持PHP、NodeJS、Go和C等各种语言。
用于移动应用的CI工具
随着智能手机的日益普及,移动应用的数量也在不断增长。但由于移动应用与Web应用相比有一些特别之处,例如它的测试与发布方式,以及完全不同的依赖管理机制,因此移动应用对于构建、测试及部署流程提出了完全不同的要求,这是传统的CI工具力所不及的。好在如今已经有几家主流的CI提供商实现了支持移动应用的CI工具,例如CircleCI已经提供了对iOS应用的支持。
移动应用的测试与Web应用具有很大的差别,Web应用的客户端多数集中在一些主流的浏览器与操作系统上,而移动应用的客户端往往是千差万别的,特别是在Android平台上。某些测试框架,例如Espresso以及Appium能够自动替你解决许多困难。而像Crashlytics与HockeyApp这样的工具除了内置的CI功能之外,还能够自动生成应用崩溃的报告,为开发者进行问题诊断提供充分的上下文。
而由于移动客户端的多样性,以集中化的方式进行所有测试的方式是不太实际的。因此,移动开发社区更推崇beta测试的方式,通过TestFairy或TestFlight等工具将潜在的新版本发布给beta测试人员。
移动应用的另一个独特之处在于它的发布方式,通常需要经过漫长而繁琐的审核流程才可发布至对应的应用商店。这不仅降低了持续交付的速度,还不得不在流程中引入各种人工步骤,使全自动化的流程无法实现。
为此,像Fastlane这样的工具可实现将应用审核流程中的大部分元素实现自动化,例如为新应用进行屏幕截图及处理认证等信息。可结合Jenkins等CI工具以完善整个工作流。
CI工具的未来
CI与CD过程如今已成为现代化应用开发中一个并不可少的元素,绝大多数开发团队在软件项目中都需要设计一个完善的CI与CD工作流。
而CI的发展并不会停下脚步,它仍处于高速的发展中。在对Web及移动项目支持的基础上,未来几年之内,我们将看到CI在其他类型的开发中的应用,例如智能手表、智能汽车以及物联网中,甚至是在虚拟现实与生物科技项目中的应用。
CI过程目前所面临的一个挑战在于在开发环境中执行的自动化测试与生产环境之间总是存在着或多或少的差别。随着近来年以Docker为代表的容器化技术在(微)服务系统中的广泛应用,CI过程也从容器的使用中受益匪浅。Docker的高可移植性使多个CI提供商开始拥抱Docker。举例来说,CircleCI就支持基于容器的应用,而CodeShip近期也推出了Jet,这是一个对Docker应用进行测试与部署的解决方案。
相关推荐
总的来说,多媒体技术的发展历程是一部计算机技术与信息交流方式不断融合的历史。从最初的军事应用到如今的日常生活中无处不在,多媒体技术不仅丰富了我们的信息世界,也为社会各个领域的创新提供了强大支持,展示了...
计算机系统结构的发展历程是信息技术演进的关键组成部分,它反映了计算能力、效率和可扩展性的不断提升。从最初的单指令流单数据流(SISD)到后来的多指令流多数据流(MIMD),每一代的进步都伴随着计算性能的显著...
【数字集成电路EDA的发展历程】 数字集成电路(Digital Integrated Circuits)是指将多个数字逻辑电路元件集成在一块半导体材料上,形成具有特定功能的电路模块。它在电子设备中扮演着核心角色,尤其在通信、计算机...
本文件“ChatGPT发展历程、原理、技术架构详解和产业未来.rar”将深入探讨ChatGPT的诞生背景、核心技术、架构设计以及其对未来的可能影响。 一、发展历程 ChatGPT的发展历程始于2018年,当时OpenAI推出了GPT...
制造业信息化是指将信息技术应用于制造业,以提高生产效率、降低成本、增强创新能力的过程。...未来,制造业信息化将继续深度融合新技术,构建智能、绿色、高效的新型制造体系,为全球制造业带来持续的变革。
计算机辅助设计(CAD)是利用计算机技术进行设计和绘图的一种方法,自20世纪60年代以来,它已经经历...总的来说,CAD作为现代设计的核心工具,其发展历程和未来趋势都表明它将继续在科技和工业领域扮演至关重要的角色。
本文将深入探讨ChatGPT的发展历程、核心技术原理、技术架构以及其可能带来的产业未来。 一、发展历程 ChatGPT的诞生源自于OpenAI对预训练语言模型的不断探索。2018年,他们推出了GPT-1,开启了大模型的先河;随后...
《Matlab的发展历程与未来趋势》 MATLAB,全称Matrix Laboratory,是由Cleve Moler博士在1970年代中期创建的,旨在为学生提供便捷地调用EISPACK和LINPACK这两个矩阵运算程序库的接口。EISPACK专注于特征值问题的...
在本文中,我们将探讨从Jenkins到GitHub Actions的CI/CD发展历程,以及这一领域中的技术创新。 Jenkins作为早期的CI工具,以其强大的插件生态系统和灵活的配置赢得了广泛的使用。它的"面子"是指Pipeline执行容器,...
计算机辅助集成设计技术,作为现代制造业的关键组成部分,其发展历程与技术革新紧密相连,涉及多个领域的协同与融合。本文深入探讨了计算机辅助设计(CAD)、计算机辅助工程(CAE)、计算机辅助工艺规划(CAPP)、...
【制造业的发展历程】 制造业是全球经济的核心组成部分,其发展历程与人类社会的进步紧密相连。自远古时期,人类就开始了制造活动,从简单的石器时代到青铜器、铁器时代,每一步都反映了技术的进化和生产力的提升。...
计算机辅助设计(CAD)是利用计算机技术...总的来说,CAD已经成为现代设计不可或缺的一部分,它的发展历程和未来趋势体现了科技与创新在工程设计中的重要地位,同时也揭示了中国CAD技术追赶国际先进水平的挑战与机遇。
总结起来,电子病历的发展历程见证了信息技术如何重塑医疗保健行业,从最初的自动化尝试到如今的全方位集成。随着技术的持续进步,电子病历将进一步提升医疗服务的质量和效率,同时也对医疗系统的规划和管理提出了新...
计算机的发展历程可以追溯到20世纪40年代,1946年,美国宾夕法尼亚大学的ENIAC(Electronic Numerical Integrator And Computer)诞生,标志着计算机时代的开启。ENIAC使用了电子管作为主要元件,尽管体积巨大、耗电...
【手机发展历程】 手机的历史可以追溯到20世纪40年代,由美国的贝尔实验室开始试制。1946年,他们制造出了第一部移动通讯电话,但由于体积过大,并未实现真正的移动性。直到60年代末,AT&T和摩托罗拉开始对此技术...
### 操作系统的发展历程及发展趋势 #### 一、操作系统历史概览 操作系统的诞生和发展史,在某种程度上也是计算机发展的缩影。操作系统的核心功能是对硬件进行管理和控制,并为应用程序提供必要的服务和支持。没有...
论软件工程的发展历程及前景展望 一、软件工程的诞生:历史背景与需求驱动 自1946年世界上首台电子计算机ENIAC的问世,标志着人类科技史上的一个新纪元。随着时间的推移,计算机技术不仅取得了突飞猛进的发展,还...
从技术角度看,单片机的发展涉及到集成电路技术的进步、嵌入式操作系统的发展、外围电路设计的创新、以及编程语言和开发工具的演化。此外,随着物联网和大数据技术的发展,单片机在数据处理、网络通信等方面的应用也...
未来,MATLAB将持续在计算科学、工程设计、数据分析等领域发挥重要作用,随着人工智能、大数据、机器学习等新技术的融合,MATLAB有望进一步拓展其功能边界,成为更加智能化和综合化的工具,服务于全球科研和工程界的...