DevOps - 持续集成(Continuous Integration)

持续集成

持续集成(Continuous integration,简称CI)是软件的开发和发布标准流程中最重要的部分。
简单来说,就是持续不断地(一天多次)将代码合并(集成)到主干源码仓库,让产品可以快速迭代,同时保持高质量。

代码每次集成到主干之前,必须通过自动化测试,以便快速发现和定位错误。
持续集成并不能消除Bug,而是让它们非常容易发现和改正。

典型的CI流程

通用的CI流程

  1. 签出代码:
    从源码管理系统里签出或者克隆最新的代码到本地开发环境
  2. 提交(commit):
    基于主干分支创建一个新的功能分支,并在此分支编写代码,并向仓库提交代码
  3. 测试(第1轮):
    代码仓库对commit操作配置了钩子(hook), 每一次提交代码都会触发测试
    单元测试(针对函数或模块的测试)和功能测试(集成测试)将会被执行、根据需要设置是否执行端对端测试
    一般来说,这些测试也会被打包到代码里。
  4. 构建(build):
    通过测试(第1轮)后,将源码转换为可以运行的实际代码,比如安装依赖,配置各种资源等
    实现一个CI流程的唯一必要条件便是得有一个自动构建系统。
    源代码一般是自包含构建的,即CI流程所需的构建脚本是放在源码仓库里的。
  5. 测试(第2轮):
    以自动化为主的全面测试,包括单元测试和集成测试,必要时做端对端测试,确保新版本的每一个更新点都必须测试到
  6. 合并:
    通过测试(第2轮)后,将代码更新集成到主干
  7. 回滚:
    如果当前版本发生问题,就回滚到上一个版本的构建结果
    一般来说,CI服务器会配置成在遇到故障时发送邮件相关人员,可以快速知晓故障并且尽快采取更正措施。

注意点

CI流程的触发方式:

  • 跟踪触发式:在每次提交到源码版本管理系统时触发
  • 计划任务:预配置好的计划,例如一次凌晨的构建
  • 手动:无论是通过CI服务器的管理界面还是脚本,用户可以手工执行CI工作流

代码审核:

  • 可在持续集成服务器里使用代码分析工具(例如Sonar)来执行自动代码审查
  • 自动代码审查通过后,可发起一个人工代码审查,揪出那些自动审查无法找出的问题,即验证业务需求,架构问题,代码是否可读,以及是否易于扩展。
  • 可灵活配置代码审核策略,例如:如果某些人没有审查代码便阻止对主干分支的任何提交。
  • 最常用的工具是Gerrit

优点

  • 自动化验证代码变更的过程
  • 在软件开发的早期发现缺陷和与其他代码和组件的集成问题
  • 自动化测试代码,提升代码质量的提升
  • 缩短开发复杂软件的市场交付时间
  • 减少大块内容合并到主干分支的情况,避免代码合并冲突和无法预料的行为

难点

  • 迁移遗留代码到现有CI系统,需要的投入通常在预料之外
  • 在文化和组织上如果没有采用敏捷原则或DevOps的工作方式,那么很可能没有持续不断的提交,那么CI的存在意义不大
  • 随着业务增长、工具的更替、技术的演进,CI系统也必然随之改动,往往会导致阶段性的不稳定和人力物力的耗费
  • 如果CI的基本设定不到位,开发流程将会增加特别的开销

参考消息

原文地址:https://www.cnblogs.com/anliven/p/10989521.html

时间: 2024-10-08 18:41:55

DevOps - 持续集成(Continuous Integration)的相关文章

持续集成 continuou integration (ci)

CruiseControl :简称 CC ,持续集成工具,主要提供了基于版本管理工具 ( 如 CVS.VSS.SVN) 感知变化或每天定时的持续集成,并提供持续集成报告. Email . Jabber 等等方式通知相关负责人,其要求是需要进行日构建的项目已编写好全自动的项目编译脚本 ( 可基于 Maven 或 Ant) . Ant NAnt Maven 等都是构建工具 他们可以将构建过程自动化 持续发布 持续交付

Azure DevOps 持续集成CI 配置

1.获取数据源  Select a scurce 2.NuGet restore,如有自定义的包 可以添加NuGet.config 3.Build Solution. (MSBuild Arguments :/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifa

GitHub+Jenkins持续集成简介

DevOps(英文Development(开发)和Operations(技术运营)的组合)是一组过程.方法与系统的统称,用于促进开发(应用程序/软件工程).技术运营和质量保障(QA)部门之间的沟通.协作与整合.它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作 持续集成概念: 持续集成Continuous Integration 持续交付Continuous Delivery 持续部署Continuous Deployment 1.1 什么是持续集成:

CI/CD持续集成/持续部署 敏捷开发

敏捷软件开发(英语:Agile software development),又称敏捷开发,是一种从1990年代开始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力.它们的具体名称.理念.过程.术语都不尽相同,相对于"非敏捷",更强调程序员团队与业务专家之间的紧密协作.面对面的沟通(认为比书面的文档更有效).频繁交付新的软件版本.紧凑而自我组织型的团队.能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发过程中人的作用. 1,CI/CD持续集

基于 CODING 的 Spring Boot 持续集成项目

本文作者:CODING 用户 - 廖石荣 持续集成的概念 持续集成(Continuous integration,简称 CI)是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成.每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误. 持续集成的模式 如图所示: CI 过程:代码编写 -> 源代码库(GitHub or gitlab)-> CI 服务器(代码构建.自动化测试.结果反馈[构建结果])

04: CI(持续集成)/CD(持续交付/持续部署)

1.1 持续集成.持续交付 介绍   参考博客:https://www.cnblogs.com/cay83/p/8856231.html 1.传统交付 1. 传统软件的开发与交付的周期都很漫长,从需求的分析.系统的设计.编写测试用例.系统开发.单元测试.组装测试到交付调试. 2. 每一次交付.升级,都需要提供基础的硬件.软件的环境.软件的代码.软件的文档与手册. 3. 工程师都按照之前预演过好多遍的流程,对照着系统的部署手册,一步一步的组装硬件,安装软件,稍有差池,就要按照对应的应急预案进行回滚

持续集成(一):什么是持续集成(CI)、持续交付(CD)和持续部署(CD)

持续集成.持续交付和持续部署 持续集成 Continuous Integration:持续集成,简称CI,是软件开发周期的一种实践,把代码仓库(Gitlab或者Github).构建工具(如Jenkins)和测试工具(SonarQube)集成在一起,频繁的将代码合并到主干然后自动进行构建和测试. 其实这里最关键的是自动化测试,这个是最难的,因为测试涉及内容很多. 持续交付 Continuous Delivery:持续交付,简称CD,是在CI的基础进行了扩展,在CI环节完成了软件构建和测试工作并形成

Jenkins持续集成学习及企业级应用

文档声明 该文档主体为去年末自主学习时总结,旨在为我司提供一套企业级持续集成解决方案.这篇文章现在看上去很稚嫩,但是当时花费了许多心血.希望将当时的学习心得拿出来与大家交流.该文档主要说明了jenkins持续集成部署的相关步骤,并着重实现了权限分组,邮件配置,插件配置的jenkins实现过程.对出现的问题进行解决,是一套持续集成的解决方案. 持续集成Continuous integration 提出 针对复杂度高的项目提出“早集成,常集成,频繁集成”来帮助项目在早期发现项目风险和质量问题 作用

用持续集成工具Travis进行构建和部署

用持续集成工具Travis进行构建和部署 摘要:本文简单说明了如何使用持续集成工具Travis进行构建和部署的过程. 1. 概述 持续集成(Continuous Integration)是软件开发过程中的重要环节,不论是在开发环境,还是生产环境,其好处都是可以让团队尽快得到反馈,从而尽早发现和解决问题,不要等到用户来报告问题,影响产品和团队的声誉.越早越快地发现和解决问题,成本越低,这也是敏捷开发的基本目的之一. 持续集成的工具有不少,著名的有CruiseControl.JetBrains的Te