持续集成

本文简要介绍持续集成的概念和做法。

持续集成

一、概念

持续集成指的是,频繁地(一天多次)将代码集成到主干。

它的好处主要有两个。

(1)快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。
(2)防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。

持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。

Martin Fowler说过,”持续集成并不能消除Bug,而是让它们非常容易发现和改正。”

与持续集成相关的,还有两个概念,分别是持续交付和持续部署。

二、持续交付

持续交付(Continuous delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。

持续交付可以看作持续集成的下一步。它强调的是,不管怎么更新,软件是随时随地可以交付的。

三、持续部署

持续部署(continuous deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。

持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。

持续部署的前提是能自动化完成测试、构建、部署等步骤。它与持续交付的区别,可以参考下图。

持续集成

图片来源

四、流程

根据持续集成的设计,代码从提交到生产,整个过程有以下几步。

4.1 提交

流程的第一步,是开发者向代码仓库提交代码。所有后面的步骤都始于本地代码的一次提交(commit)。

4.2 测试(第一轮)

代码仓库对commit操作配置了钩子(hook),只要提交代码或者合并进主干,就会跑自动化测试。

测试有好几种。

  • 单元测试:针对函数或模块的测试
  • 集成测试:针对整体产品的某个功能的测试,又称功能测试
  • 端对端测试:从用户界面直达数据库的全链路测试

第一轮至少要跑单元测试。

4.3 构建

通过第一轮测试,代码就可以合并进主干,就算可以交付了。

交付后,就先进行构建(build),再进入第二轮测试。所谓构建,指的是将源码转换为可以运行的实际代码,比如安装依赖,配置各种资源(样式表、JS脚本、图片)等等。

常用的构建工具如下。

Jenkins和Strider是开源软件,Travis和Codeship对于开源项目可以免费使用。它们都会将构建和测试,在一次运行中执行完成。

4.4 测试(第二轮)

构建完成,就要进行第二轮测试。如果第一轮已经涵盖了所有测试内容,第二轮可以省略,当然,这时构建步骤也要移到第一轮测试前面。

第二轮是全面测试,单元测试和集成测试都会跑,有条件的话,也要做端对端测试。所有测试以自动化为主,少数无法自动化的测试用例,就要人工跑。

需要强调的是,新版本的每一个更新点都必须测试到。如果测试的覆盖率不高,进入后面的部署阶段后,很可能会出现严重的问题。

4.5 部署

通过了第二轮测试,当前代码就是一个可以直接部署的版本(artifact)。将这个版本的所有文件打包( tar filename.tar * )存档,发到生产服务器。

生产服务器将打包文件,解包成本地的一个目录,再将运行路径的符号链接(symlink)指向这个目录,然后重新启动应用。这方面的部署工具有AnsibleChefPuppet等。

4.6 回滚

一旦当前版本发生问题,就要回滚到上一个版本的构建结果。最简单的做法就是修改一下符号链接,指向上一个版本的目录。

五、参考链接

(完)

Original: https://www.cnblogs.com/sddai/p/15688912.html
Author: stardsd
Title: 持续集成

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/547549/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 毫秒时间转换

    https://www.npmjs.com/package/ms 作者:孟繁贵 Email:meng010387@126.com 期待共同进步! Original: https:/…

    技术杂谈 2023年5月31日
    099
  • SpringBoot与多数据源那点事儿~

    持续原创输出,点击上方蓝字关注我 目录 前言 写这篇文章的目的 什么是多数据源? 何时用到多数据源? 整合单一的数据源 整合Mybatis 多数据源如何整合? 什么是动态数据源? …

    技术杂谈 2023年7月24日
    067
  • String为什么不是基本数据类型

    java虚拟机处理基础类型与引用类型的方式是不一样的,对于基本类型,java虚拟机会为其分配数据类型实际占用的内存空间,对于引用类型变量,他仅仅是一个指向堆区中某个实例的指针。 O…

    技术杂谈 2023年6月21日
    088
  • SpringBoot学习笔记总结——动力节点

    最近跟着动力节点王鹤老师的视频学到了springboot,看过最细的springboot讲解,初学入门最佳,自己做了笔记分享给大家 视频资源: @ConfigurationProp…

    技术杂谈 2023年7月25日
    059
  • Java线程安全与锁

    Java 线程安全 与 锁 多线程内存模型 线程私有栈内存 每个线程 私有的内存区域 进程公有堆内存 同一个进程 共有的内存区域 为什么会有线程安全问题? 多个线程同时具有对同一资…

    技术杂谈 2023年7月24日
    070
  • Docker安装Mysql

    1、在docker hub 上查看要下载的mysql镜像名称 dockerHub官网地址 在上方搜索栏里输入mysql 找到要拉取的镜像版本,在tag下找到版本 回到虚拟机界面,执…

    技术杂谈 2023年6月21日
    081
  • 运行pysot-toolkit平台进行tracker对比时,报错numba.core.errors. TypingError: Failed in nopython mode pipeline (step: nopython frontend) non-precise type array(pyobject, 0d, C)

    在OTB100上测试tracker,然后用pysot-toolkit平台对比跟踪算法时, 出现报错:numba.core.errors. TypingError: Failed i…

    技术杂谈 2023年7月11日
    070
  • “情绪智力”管理与提升

    Esther是一个小型团队的管理者,大家都很喜欢她。她亲切友好,彬彬有礼,又善解人意。她是解决问题的能手,习惯将挫折看作是机遇。她对工作十分投入,还能鼓励同事保持平静。有了这样一个…

    技术杂谈 2023年5月31日
    087
  • JZ0047:二叉树剪支

    title:二叉树剪支 📃 题目描述 题目链接:二叉树剪支、相同题目 🔔 解题思路 第一种做法:dfs,思考方式是你站在一个点上怎么做,在一个点上,先看左子树是否要删除,再看看右子…

    技术杂谈 2023年7月24日
    075
  • MySQL — 索引

    索引(Index)是高效获取数据的数据结构,就像书的目录,提高检索数据的效率。 优点:提高数据检索效率,降低数据库的 IO 成本;通过索引列对数据进行排序,降低数据排序的成本,降低…

    技术杂谈 2023年7月11日
    060
  • 初步分析美国科研项目申报项目

    将XML转换为新格式的XML、excel、和SQlserver数据 package hander; /** * @author ZTX * @function:读取XML中字段到e…

    技术杂谈 2023年5月31日
    058
  • Spring Boot 通用对象列表比较和去重

    1、前言 在Excel批量导入数据时,常常需要与数据库中已存在数据的比较,并且需要考虑导入数据重复的可能性。 导入的行数据,一般有一个实体类(对象)与之对应,往往这个实体类在数据库…

    技术杂谈 2023年6月21日
    078
  • 设计模式-策略模式

    预先定义有着不同执行过程但 结果相同的 算法族,运行时指定所需算法。 算法族此处为一组有共同主题的有相同结果的不同算法的集合。 话不多说,看个优化案例。 优化案例 不使用策略模式的…

    技术杂谈 2023年7月11日
    064
  • 编程语言史话,为什么编程中 1=2?

    考虑以下代码: a = 1 a = a + 1 print(a) 你写代码时候是不是也疑惑过,为什么代码中会有a = a + 1,这个怎么解释?这就不是在说1 = 2么? 这是一个…

    技术杂谈 2023年5月31日
    090
  • linux下常见的字符串处理

    linux下有许多对字符串文本的处理工具,diff,grep,awk,sed等等。。 比较两个文件的不同 [root@bogon diff]# diff file1 file2 以…

    技术杂谈 2023年6月21日
    0106
  • 经典的三色旗问题

    首先来看,什么是三色旗问题。 有一根绳子,上面有红、白、蓝三种颜色的旗子。绳子上旗子的颜色并没有顺序,现在要对旗子进行分类,按照蓝色、白色、红色的顺序排列。只能在绳子上进行移动,并…

    技术杂谈 2023年7月23日
    076
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球