2023年6月29日发(作者:)
持续集成、持续交付、持续部署(CICD)简介概述:软件开发周期中需要⼀些可以帮助开发者提升速度的⾃动化⼯具。其中⼯具最重要的⽬的是促进软件项⽬的持续集成与交付。通过CI/CD⼯具,开发团队可以保持软件更新并将其迅速的投⼊实践中。CI/CD也被认为是敏捷开发的最重要实践之⼀。⼀ 、持续集成从上图可以看到,持续集成应该⾄少包括以下⼏部分:⾃动化构建Continuous Build⾃动化测试Continuous Test⾃动化集成Continuous Intergration1. ⾃动化构建包括以下过程:将源码编译成为⼆进制码打包⼆进制码运⾏⾃动化测试⽣成⽂档⽣成分发媒体(例如:Debian DEB、Red Hat RPM或者Windows MSI⽂件)所以,⾃动化构建,从功能⾓度分,最关键的是三部分:版本控制⼯具、构建⼯具、CI服务器。⽽其中最核⼼的⼜是构建⼯具。其他开源的、与持续集成相关的⼯具也有很多,但⼤多数是辅助性的⼯具。(1)版本控制⼯具有时,版本控制⼜称为配置管理(SCM),所以版本控制⼯具同时也是配置管理⼯具。在各类版本控制的开源软件中,最著名的莫过于CVS、SVN(Subversion)、GIT三个了。
这三个⼯具各有千秋。其中,GIT⽀持离线⼯作,更适合开源软件或者开发⼈员不能集中办公情况下的版本管理⼯作。同时,SVN和GIT可以配合使⽤。(2)构建⼯具构建⼯具是持续集成的核⼼,它对源代码进⾏⾃动化编译、测试、代码检查,以及打包程序、部署(发布)到应⽤服务器上。从配置管理⼯具上下载最新源代码后,所有的后续⼯作⼏乎都可以通过构建⼯具完成。
在java开发中,⽐较有名的构建⼯具就是Ant、Maven、Gradle。在PHP开发中,Phing(基于Ant)也⽐较有名。同样的,Maven也可通过相关的PHP-Maven插件完成对PHP开发构建的⽀持。(3)CI服务器CI服务器的主要作⽤就是提供⼀个平台,⽤于整合版本控制和构建⼯作,并管理、控制⾃动化的持续集成。
开源软件中,⽐较有名的CI服务器包括Jenkins、CruiseControl、Continuum。⽽⽐较有名的商业化CI服务器是TeamCity、Bamboo、Pulse等。(4)其他⼯具很多⼯具可以通过与构建⼯具、CI⼯具相结合(当然,其中有很多⼯具也可以单独⼯作),来完成更多的⾃动测试、报告⽣成等⼯作。根据⼯具不同,其具体的结合⽅法也不同,但⼤体都是通过插件形式进⾏结合的。例如:Maven中通过依赖和plugin⽅式引⼊第三⽅⼯具Jenkins主要通过各类插件引⼊第三⽅⼯具这些⼯具种类实在太多,可以根据实际⼯作需要进⾏选择。2.⾃动化测试⾃动化测试是持续集成必不可少的⼀部分,基本上,没有⾃动化测试的持续集成,都很难称之为真正的持续集成。我们希望持续集成能够尽早的暴露问题,但这远⾮配置⼀个 Hudson/Jenkins服务器那么简单,只有真正⽤⼼编写了较为完整的测试⽤例,并⼀直维护它们,持续集成才能孜孜不倦地运⾏测试并第⼀时间报告问题。测试⾃动化是使⽤特定的软件(独⽴于被测试的软件)来控制测试的执⾏以及⽐较实际输出与预期输出。测试⾃动化可以将某些重复但必要的任务⾃动化,或者执⾏某些难以⼿动执⾏的额外测试。⾃动化测试还包括单元测试、集成测试、系统测试、验收测试、性能测试等,在不同的场景下,它们都能为软件开发带来极⼤的价值。⼆、持续交付持续交付(Continuous Delivery, CD)是⼀种软件⼯程的⼿段,让软件在短周期内产出,确保软件随时可以被可靠地发布。其⽬的在于更快、更频繁地构建、测试以及发布软件。通过加强对⽣产环境的应⽤进⾏渐进式更新,这种⼿段可以降低交付变更的成本与风险。⼀个简单直观的与可重复的部署过程对于持续交付来说是很重要的。三、持续部署如图所⽰,持续部署与持续交付之间的差异就是前者将部署⾃动化了。
在持续交付的实践中,交付的⽬标是QA,但是实际上,软件最终是要交付到客户⼿上的。在SaaS领域⾥,持续部署采⽤得⽐较⼴泛,因为服务⽐较容易做到静默升级。
采⽤持续部署的前提是⾃动化测试的覆盖率⾜够⾼。
采⽤持续部署的好处是能减少运维的⼯作量,缩短新特性从开发到实际交付的周期。四、CI/CD具体实现常见CI/CD⼯具及其⽐较:这⾥的⽀持,意思应该是直接的⽀持,例如Jenkins,其实和git结合也很简单,通过脚本就可以实现。五、持续集成⼯具集之 Jenkins简介Jenkins 是⼀个可扩展的持续集成引擎。1.主要⽤于:持续、⾃动地构建/测试软件项⽬。监控⼀些定时执⾏的任务。Jenkins拥有的特性包括:s拥有的特性包括:易于安装-只要把部署到servlet容器,不需要数据库⽀持。易于配置-所有配置都是通过其提供的web界⾯实现。集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知。⽣成JUnit/TestNG测试报告分布式构建⽀持Jenkins能够让多台计算机⼀起构建/测试。⽂件识别:Jenkins能够跟踪哪次构建⽣成哪些jar,哪次构建使⽤哪个版本的jar等。插件⽀持:⽀持扩展插件,你可以开发适合⾃⼰团队使⽤的⼯具。s的出现⽬前持续集成(CI)已成为当前许多软件开发团队在整个软件开发⽣命周期内侧重于保证代码质量的常见做法。它是⼀种实践,旨在缓和和稳固软件的构建过程。并且能够帮助您的开发团队应对如下挑战:软件构建⾃动化 :配置完成后,CI系统会依照预先制定的时间表,或者针对某特定事件,对⽬标软件进⾏构建。构建可持续的⾃动化检查 :CI系统能持续地获取新增或修改后签⼊的源代码,也就是说,当软件开发团队需要周期性的检查新增或修改后的代码时,CI系统会不断确认这些新代码是否破坏了原有软件的成功构建。这减少了开发者们在检查彼此相互依存的代码中变化情况需要花费的时间和精⼒。构建可持续的⾃动化测试 :构建检查的扩展部分,构建后执⾏预先制定的⼀套测试规则,完成后触发通知(Email,RSS等等)给相关的当事⼈。⽣成后后续过程的⾃动化 :当⾃动化检查和测试成功完成,软件构建的周期中可能也需要⼀些额外的任务,诸如⽣成⽂档、打包软件、部署构件到⼀个运⾏环境或者软件仓库。这样,构件才能更迅速地提供给⽤户使⽤。部署⼀个CI系统需要的最低要求是,⼀个可获取的源代码的仓库,⼀个包含构建脚本的项⽬。下图概括了CI系统的基本结构:
4.使⽤Jenkins的⼀些理由:该系统的各个组成部分是按如下顺序来发挥作⽤的:开发者检⼊代码到源代码仓库。CI系统会为每⼀个项⽬创建了⼀个单独的⼯作区。当预设或请求⼀次新的构建时,它将把源代码仓库的源码存放到对应的⼯作区。CI系统会在对应的⼯作区内执⾏构建过程。(配置如果存在)构建完成后,CI系统会在⼀个新的构件中执⾏定义的⼀套测试。完成后触发通知(Email,RSS等等)给相关的当事⼈。(配置如果存在)如果构建成功,这个构件会被打包并转移到⼀个部署⽬标(如应⽤服务器)或存储为软件仓库中的⼀个新版本。软件仓库可以是CI系统的⼀部分,也可以是⼀个外部的仓库,诸如⼀个⽂件服务器或者像、 SourceForge之类的⽹站。CI系统通常会根据请求发起相应的操作,诸如即时构建、⽣成报告,或者检索⼀些构建好的构件。Jenkins就是这么⼀个CI系统。之前叫做Hudson。是所有CI产品中在安装和配置上最简单基于Web访问,⽤户界⾯⾮常友好、直观和灵活,在许多情况下,还提供了AJAX的即时反馈。Jenkins是基于Java开发的(如果你是⼀个Java开发⼈员,这是⾮常有⽤的),但它不仅限于构建基于Java的软件。Jenkins拥有⼤量的插件。这些插件极⼤的扩展了Jenkins的功能;它们都是开源的,⽽且它们可以直接通过web界⾯来进⾏安装与管理。s的⽬标Jenkins的主要⽬标是监控软件开发流程,快速显⽰问题。所以能保证开发⼈员以及相关⼈员省时省⼒提⾼开发效率。CI系统在整个开发过程中的主要作⽤是控制:当系统在代码存储库中探测到修改时,它将运⾏构建的任务委托给构建过程本⾝。如果构建失败了,那么CI系统将通知相关⼈员,然后继续监视存储库。它的⾓⾊看起来是被动的;但它确能快速反映问题。特别是它具有以下优点:Jenkins⼀切配置都可以在web界⾯上完成。有些配置如MAVEN_HOME和Email,只需要配置⼀次,所有的项⽬就都能⽤。当然也可以通过修改XML进⾏配置。⽀持Maven的模块(Module),Jenkins对Maven做了优化,因此它能⾃动识别Module,每个Module可以配置成⼀个job。相当灵活。测试报告聚合,所有模块的测试报告都被聚合在⼀起,结果⼀⽬了然,使⽤其他CI,这⼏乎是件不可能完成的任务。构件指纹(artifact fingerprint),每次build的结果构件都被很好的⾃动管理,⽆需任何配置就可以⽅便的浏览下载。
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1688022005a67532.html
评论列表(0条)