我们正在路上—从持续集成到持续发布

 持续集成作为一种很好的软件工程实践被很多团队所采用,和其他一些先进的实践一样,它最终的目的一定是服务于产品的。产品的价值最终体现在用户体验的提升,而这个的前提就是产品的每一次更新能够及时地传递给用户,对于运维团队来说就是更快地在生产环境中部署最新的产品,对于研发团队来说就是更频繁地发布可以工作的软件。

  暂且抛开业界非常流行的DevOps理念,单纯地从研发团队来看,如何快速的发布对用户有价值的软件是重中之重。

  那结合持续集成,我们又可以做些什么呢?

  先来看看我们持续集成的现状

  独立的环境:持续集成往往有一套独立的测试环境,而团队还会在其他测试环境中进行测试,两者似乎从来没有交集

  独立的构建:持续集成往往就是对当前最新的代码做一些自动化的测试,而完全忽略了软件版本的管理,甚至不能很好的保证各种测试是否是基于同一份代码

  辅助手段:持续集成往往作为一种测试的辅助手段,更多的是用于快速发现代码提交阶段的错误

  以上这些在持续集成初期完全没有问题,而且这种方式也的确带来了不少的价值,能够帮助团队更透明地了解产品的质量,并且快速的定位和解决问题。只是,我们可以做的更多

  再来展望下持续发布的流程

  整体的思路就是以持续集成流水线作为核心,把软件发布的各个环节透明地展示给团队,并且通过流水线来管理版本的发布流程

  测试环境整合:打通持续集成环境/手工测试环境/线上模拟环境,保证一条流水线上使用同一份代码,同一份构建物

  测试流程整合:一键式的环境部署和一键式的版本管理(打TAG,拉分支,构建物的存储等),发布前对产品质量有清晰的了解

  重要和主要手段:以持续发布流水线为基准,并积极拓展其他类型的测试

  把持续集成融入到产品开发和发布阶段,而不是简单地搭建一套“自动化运行任务”,并充分利用构建流水线实现流程和质量的双重把控

  最后来看下某个产品初步定义的持续发布的流程

  产品现状

  三套环境:持续集成环境(云主机),手工测试环境(云主机),线上模拟环境(物理机)

  持续集成状态

  自动化的编译,打包,部署,冒烟测试和快速性能测试已经实现自动化并实时通过代码提交触发,全程20分钟左右

  单元测试和静态代码检查还在完善中,也实时通过代码提交触发,不过没有列入关键点,也就是成功与失败并不直接影响构建流程

  每日的功能测试(1000+个测试用例)在晚间运行,全程3个小时左右

  新功能测试在手工测试环境下进行

  上线前需要在线上模拟环境进行性能测试和稳定性测试

 持续发布流水线

  持续集成环境实时保证当前的提交没有破坏基本功能

  通过手工触发(QA人员控制),一键部署产品到手工测试环境并能在流水线上展示手工测试结果(通过简单的设置一个变量达到效果);同时可以选择触发功能测试,达到同步的执行

  如果QA人员认为当前测试版本可以达到内部发布要求,可以一键打TAG,并生成和存储dist包

  通过手工触发(QA人员控制),一键部署dist包到模拟线上环境,而后自动化进行性能测试和稳定性测试

  理想状态这步应该是自动触发,由于目前机器的不可独占性,暂时只能手工触发

  自动化的性能测试和稳定性测试还是实施中

  最终版本的对外发布也是通过手工触发(QA人员控制)

  以上的流程是根据项目/产品的需求和现状制定的,只是一些思路可以借鉴,具体的实施一定要结合实际情况,因地制宜的开展

  Jenkins持续发布流水线

  几个Jenkins持续发布流水线配置小Tips

  通过BuildNameSetterPlugin显示当次流水线构建的版本(SVN revision或是Git revision)

  通过ParameterizedTriggerPlugin自动触发下游任务,并把构建版本信息传递下去

  通过CopyArtifactPlugin用于构建物的部署

  通过BuildPipelinePlugin手工触发某些任务,用于需要人工介入的阶段

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-10-21 08:30:43

我们正在路上—从持续集成到持续发布的相关文章

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

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

云效平台:企业级互联网架构下的持续集成与持续交付实践

摘要:本文的整理自2017云栖大会-南京峰会上阿里云高级技术专家鲁小川的分享讲义,讲义主要分享了阿里云云效平台对于企业级互联网架构下的持续集成与持续交付的实践经验,首先介绍了阿里云云效平台的起源,之后对于企业并发研发项目交付流程存在痛点进行了介绍,并介绍了云效平台针对业务痛点所能够提供的服务和能力,并且结合实际案例分享了云效平台持续集成和持续交付实践. 在2017云栖大会-南京峰会上,阿里云高级技术专家鲁小川做了题为<企业级互联网架构下CI/CD实践>的精彩分享.所谓CI/CD也就是持续集成与

《移动App测试的22条军规》——第23章,第22节实现微信App的持续集成和持续部署

23.22 实现微信App的持续集成和持续部署由于我们并没有微信App的代码,所以我们不能部署微信App的持续集成环境,但是我们可以部分实现微信App的持续部署. 为了实现Android版本微信App生成安装文件并部署到设备上的过程,我们可以首先把微信App的安装文件复制到电脑上的Dropxbox文件夹下(如图23.64所示). 通过以微信App的测试为例,我们实际演练了如何使用移动App测试的22军规来指导测试.虽然笔者演示的内容相对基础,但是相信大家在了解到如何使用这22条军规之后,可以结合

产品迭代发布如何更快速?阿里持续集成与持续交付实践之路全解析

2017年5月9日,云效平台资深研发工程师向禹通过直播分享了<持续集成与持续交付实践之路>.他从云效背景.云效方案.云效价值三个方面进行了分享.他主要分享了持续集成持续交付的解决方案和案例,并且对大型系统如何实现持续集成.持续交付.进行产品迭代发布进行了详细介绍. 以下内容根据直播视频整理而成. 云效背景--阿里巴巴<持续交付>之路 大应用下的交付 在七八年之前,阿里巴巴的B2B一直沿用瀑布的模式来进行项目管理,当时已经感觉到瀑布模式对应用持续快速的发展产生了很大的影响.并且当时很

让IT跟上业务思考的速度--从持续集成到持续交付

通过 7 个持续交付最佳实践,给读者一个思路,无论是建设持续交付能力,还是在进行持续交付平台的选型,都能够在业界经验的基础上走向更为正确的道路.同时,本文还引入了持续交付成熟度模型,目的是想帮助企业,把一个想象中全面而复杂的交付流程进行切分,按照环节和成熟度等级展现,将实现持续交付能力之路变得更为清晰.更可操作.有助于企业建立良好的期望和愿景,并开展切实可行的行动. 市场和业务瞬息万变,企业的 IT 部门必须面对产品上线周期不断变短的事实,也就是说,需要建立产品交付反馈圈,并让这个闭环圈的反馈速

从持续集成到持续交付——Docker Cloud概览

本文讲的是从持续集成到持续交付--Docker Cloud概览[编者的话]本文介绍了Docker Cloud的概况,以及如何使用Docker Cloud改进我们的持续集成和持续发布的流程.也指出了目前Docker Cloud还存在的功能方面的问题. 容器化(Docker容器),持续集成(CI),持续部署或持续交付(CD)是简化DevOps工作的终极方案.这展示了一个未来的场景:当代码被提交到代码库之后,所有的后续工作包括编译.配置.交付和部署,甚至是高可用性都是完全标准化和自动化的.从这个角度我

直播|超大型系统的持续集成与持续交付的解决方案及案例分析

人人都在谈敏捷开发的时代,大型系统要保证产品质量,实现快速迭代却变得不易.那么大型系统如何实现持续集成持续交付,进行产品迭代发布呢? 9月7日晚上20:00阿里巴巴高级测试开发专家--鲁小川,将在阿里云•为大家现场直播,提供解决方案!与此同时,直播现场特别设置答疑环节,让观众与专家进行一次零距离的沟通交流! 直播详情 直播时间:2016-09-07 20:00:00 直播地址:http://yq.aliyun.com/webinar/play/69 (报名之后才能收看直播哦~) 直播内容 主题:

谈谈持续集成,持续交付,持续部署之间的区别

经常会听到持续集成,持续交付,持续部署,三者究竟是什么,有何联系和区别呢? 假如把开发工作流程分为以下几个阶段: 编码 -> 构建 -> 集成 -> 测试 -> 交付 -> 部署 正如你在上图中看到,「持续集成(Continuous Integration)」.「持续交付(Continuous Delivery)」和「持续部署(Continuous Deployment)」有着不同的软件自动化交付周期. 持续集成 持续集成是指软件个人研发的部分向软件整体部分交付,频繁进行集成

企业如何实现持续集成与持续交付

        持续集成则是敏捷开发具体实践的一个建议环节,通过这个环节可以在研发过程中快速得到代码质量的反馈.Martin Fowler对持续集成是这样定义的:持续集成 是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成.每次集成都通过自动化的构建(包括编译,部署,自动化测试)来验证,从而尽快地发现集成错误.自动化构建验证可以大大减少集成的问题,让团队能够更快的开发内聚的软件.         持续交付(Continuous D