针对持续交付管理构建作业

对于不断演进中的产品,持续交付(CD)使其开发到产品交付的过程更加简单。持续集成(CI)位 于持续交付过程的开始阶段,它扮演了这个过程中的重要角色,由它定义软件开发过程。

在书 上和网上可以查到很多持续集成工具的资料,但处于持续集成过程中核心的构建作业却没有太多资料。

典型的持续集成过程如下:开发人员在他们自己的机器上手工构建和测试源代码。然后他们会 把修改提交到一个源码控制管理系统。随后构建工具将运行作业编译和测试这些代码。然后把构建的工 件上传到一个中心资源库,用于接下来的开发和测试。

因此,作业在持续集成工具中的角色是 管理源代码不断的修改、运行测试并通过发布通道管理工件传输的物流。

构建工作的作业任务 少则数个,多则上千,所有作业都执行不同的功能。幸运的是,我们可以用一种更加有效的方式去管理 这些作业。

自动化创建构建作业

那么为什么我们要装置一套自动化创建其他作业的设施 ?

构建工具在用户手册中描述了如何创建构建作业,但却很 少具体解释如何管理这些作业,尽管这些工具完全可以做到这些事情。

通常开发人员要了解他 们的应用是如何构建的,然后为创建和配置构建作业取得独占性控制权限。然而,这个过程存在一些缺 陷:

软件架构约束:由于架构层面的因素,应用很可能有各种不同的构建方式。开发人员可能需要说明 他与另一个开发人员在构建应用时的不同,所以一个作业和另一个作业的构建配置总有些细微的差异。 因此,如果所有的配置都不同,那么大量的作业就会变得极难维护。

人为因素:手工创建作业引入了出错的风险,尤其是采用先复制再修改的方式去创建一个新作业( 即先复制一个已有的作业,然后再修改这个副本,从而得到一个新作业)。

作业时间轴控制:通常情况下,不会保存每次构建的作业配置,也就是说,如果一个作业的配置被 修改了,那么就有可能破坏之前的构建。

所以综合考虑以上几点,如果创建作业时没有一个一致的方法,开发人员就要用自己的设备执行构 建了,那么迎接我们的最终结果将是极难维护的持续集成构建系统和令人头痛的管理。这违背了建立持 续集成系统的原则:精益和易维护性。

实际上大多数构建工具都具有这样的设施,可以通过API 脚本自动化创建、维护和备份构建作业。然而,尽管构建工具在用户手册里提到过这些功能,但却经常 被忽视而未被采用。

自动化创建构建作业的优点

为简化持续集成构建过程,可以使用一 个主构建作业去自动化创建多个作业,这种做法有以下几个优点。

通过作业模版或脚本创建所有构建作业的配置。它们也可以放在配置控制之下。使用模版或运行脚 本可以非常简单地创建一个新作业。这可以显著地缩减作业创建时间(从若干分钟缩短到几秒种)。今 后,也可以更加简单地修改作业配置;修改构建作业模版的配置就可以保证所有在之后新创建的作业都 会继承这些修改。

所有已有构建作业的配置都保持一致,相比杂乱不一致的系统,这就可以更加简单地通过工具或脚 本全局更新所有的配置了。

开发人员在构建作业时就不再需要构建工具的详细知识了。

自动化创建和拆卸构建作业的能力是敏捷持续集成构建生命周期的一部分。

让我们一起探讨一下下列的几个要点:

要点1:作业配置的配置控制

让持续集成系统 的每个组件都处于配置控制之下是一个好的实践。这些组件不仅仅包括源代码,还包括基础的构建系统 和构建作业。

大多数构建工具把作业配置以文件形式保存在主系统上。这些文件设定为普通的 XML格式,可以直接通过某种REST API前端接口正常地存取这些文件。某些构建工具具备一些内置的特 性,可以利用这些特性把作业配置以文件形式保存到任意位置。

因为可以把作业配置保存为文 件,就能够把作业配置以文件形式保存到配置管理(CM)系统中了。不管是直接修改文件然后再上传到 构建工具,还是修改构建工具的作业配置,保存这个文件后再把它手工上传到配置管理系统,用这两种 方式针对作业配置所做的任何变更都会被记录下来。实际实施哪种方法取决于从构建工具中直接访问作 业配置文件的简易程度。

在配置管理系统中保存作业配置还有一个重要的理由,如果发生灾难 性故障,丢失了所有作业配置,构建系统可以比较迅速地恢复,把所有作业、构建日志和构建历史恢复 回已知的最近的一次良好状态。

要点2:作业维护性

不言而喻,维护上千个不同的配置 将是一件令人头疼的事,正因为如此,才使得作业配置的标准化格外重要。如果必需要做一次变更,同 时它又会影响到大量相似的作业,那么更加简单的做法是编写脚本或创建特定的任务去修改这些作业。

对于持续集成来说,在构建系统中有上千个作业无论如何也不是最好的策略。我们将在下面的 要点4中对此做更加深入的讨论。

要点3:开发人员控制

尽管开发人员被鼓励独立自主地 工作,但他们也要使用一个集中的构建系统构建应用程序,他们需要依照构建过程按照指导方针工作。

开发人员希望他们的代码变更能得到快速反馈,所以不希望在构建工具和作业配置上浪费过多 的时间。假如通过一个按钮为开发人员提供“自助服务”式的解决方案,可以自动化地构建作业,就会 帮助他们更快地完成开发任务。

要点4:精益持续集成系统

尽管软件开发团队在产品研 发中采用了敏捷方法,但在他们却不一定在工作中以相同的方式使用构建工具,也就是说已经适当配置 过的构建工具不应该包含太多长期的构建作业。理想情况下,应该把作业看作构建持续集成生命周期的 一部分,按需来创建。有一种常见的方法是通过任意历史作业配置重新创建构建作业,并保留本次构建 痕迹,即日志、工件、测试报告等,然后只在构建工具中保留少量作业。

当然,这一解决方案 (即按需创建-拆卸作业)或许是一个无法达成的目标,但该要点在此主要强调,应该把构建工具中的 作业数保持在一个可管理的级别。

时间: 2024-10-29 12:11:31

针对持续交付管理构建作业的相关文章

如何利用容器构建持续交付/持续发布系统?

讲师介绍  ​张春源 希云技术总监    概述     提到软件发布确实是很令人头疼的一个过程,且还是高风险动作.借用一句话:"99%的故障是由于变更引起的".本次分享内容着重介绍使用容器技术实现自动化构建.部署和测试过程,并使得开发.测试.运维之间能更好的协作,最终可以在几个小时甚至几分钟的时间,实现可重复,且可靠的软件发布系统.   常见场景    在开发测试环境中测试均没有问题,但上生产环境的时候会有问题.即使我们在开发测试环境中部署上万遍没问题,但从来没有在生产环境中部署过一次

超大型系统的持续集成与持续交付解决方案与阿里宙斯盾

作者简介:鲁小川,09年本科毕业于浙江大学软件学院,之后就一直就职于阿里巴巴B2B质量保障部,目前是云效持续集成与持续交付解决方案的负责人. 以下内容根据演讲嘉宾分享以及PPT整理而成. 今天分享的议题是<超大型系统的持续集成与持续交付解决方案及案例分析>,主要就是和大家聊聊阿里巴巴B2B技术部这几年来在持续集成与持续交付上实践经验,以及为什么要做宙斯盾系统平台产品来支撑持续交付.宙斯盾平台在阿里内部经过了5年多的积累沉淀,现在已经对外服务输出了,对外服务产品的名字叫做云效平台,后面还会介绍云

谈谈企业的持续交付流水线设计

本文讲的是谈谈企业的持续交付流水线设计,有一天,业务人员急冲冲的跑过来,对你说生产上出现了一个严重BUG,必须要尽快修复.你听完问题描述后,胸有成竹坐定并迅速定位问题,随后改动了一行代码并提交,系统开始自动编译.各个环境自动化测试.发布上线.几分钟后,生产环境上该BUG已经被修复掉. 上面所提到的场景,这是不是很美妙?但是想必不少读者要忍不住要吐槽了,这太不实际了:新功能上线测试不要时间么?新增了功能肯定要做回归测试,这都需要一定的时间.况且怎么可以随便部署上线?还得通过预发演练.走发布审批流程

百度资深敏捷教练:深度解析持续交付之全面配置管理

作者介绍 张乐,百度资深敏捷教练.架构师,Intelligent Software Development团队成员.超过13年项目管理和敏捷实战经验,曾任职于惠普.埃森哲等大型外企,负责大规模团队敏捷转型和工程效率提升,积累了丰厚的知识体系和实战案例.加入百度后,作为公司内先进软件工程方法和生产力的践行者.布道者,主导了百度云.百度金融.云安全等新技术产品的敏捷转型和DevOps实施,帮助团队从业务.过程.技术.组织和工具等多个层面建立起全面的持续交付能力.Gdevops全球敏捷运维峰会.TiD

莫源:像搭积木一样玩转Docker的持续交付

云栖TechDay活动第十八期中,阿里云的高级研发工程师莫源带来了题为<像搭积木一样玩转Docker的持续交付>的分享,主要讲解了阿里云容器服务实现基于Docker的持续交付.容器持续交付的设计思路和未来发展反向. 幻灯片下载地址:https://yq.aliyun.com/attachment/download/?filename=dbf464e5883344e9dd010214576889bf.pdf 以下为现场分享观点整理. 最近Docker越来越火,持续交付的概念也随着被大家越炒越火.

阿里巴巴1582.73亿背后的持续交付如何玩

在2017在线技术峰会--首届阿里巴巴研发效能嘉年华上,来自阿里云研发协同的技术专家怀虎分享了<阿里巴巴1582.73亿背后的持续交付如何玩>.他详细介绍了阿里巴巴的企业级持续交付,从研发参与者的各个角色解析阿里持续交付的流程和环节,并对RDC的理念进行了解析.   以下内容根据直播视频整理而成. 直播视频:https://yq.aliyun.com/edu/lesson/547 PDF下载:https://yq.aliyun.com/attachment/download/?id=1840

应用Docker进行持续交付:用技术改变交付路程

在第13期云栖TechDay活动上,唐容为大家分享了<应用Docker进行持续交付>话题.他先谈了传统CD(持续交付)过程中遇到的问题,然后解释Docker的原理及它为什么能够改变持续交付,最后分享了应用Docker化交付的过程和适用场景. 下面是演讲内容整理. 背景 互联网行业都是比较新兴的产业.市场需求量不断变化,产品不断变化,导致我的开发须不断变化,最后导致我必须持续不断的去交付.更新我的生产环境. 时间长了就会产生一系列的问题.其中最主要的问题是,老的运维人员把生产环境做好,一旦他离开

阿里技术专家:持续交付与微服务背后的实践逻辑

讲师介绍 崔力强 阿里巴巴技术专家   <微服务设计>中文译者之一:曾在ThoughtWorks任职软件交付和敏捷顾问: 对持续集成.自动化测试有丰富经验:目前专注于持续交付SaaS产品的开发,提供精益需求管理.软件设计.敏捷转型相关咨询服务.    前言 大家好,我是崔力强.目前在阿里巴巴任职.负责一款持续交付领域的SaaS产品的开发.非常高兴能够和大家分享持续交付和微服务的话题. 本次分享的重点是持续交付.也会提到一些微服务的概念,以及持续交付和微服务之间的关系.今天会涉及的一些实践可能大

【译闻】Jenkins与持续交付的若干问题

关于译者Ghostcloud Ghostcloud(中文名:精灵云)是成都精灵云科技有限公司旗下的基于Docker的PaaS/CaaS平台品牌.公司成立于2015年,核心团队由来自EMC.Veritas.华为.IBM.Microsoft的核心技术主管和架构师组成.精灵云作为国内首批从事容器虚拟化研发的企业,为企业级行业客户提供针对互联网化.私有云管理平台.大数据业务基础架构的平台服务,在国内Docker社区贡献排名前三.主创团队曾参与Beego开源项目研发,并主导发布<Docker容器实战:原理