持续集成(Continuous integration)

一、基本概念

1、持续集成

  持续集成(Continuous integration,简称CI),简单来说持续集成就是频繁地(一天多次)将代码集成到主干。

  每次集成都通过自动化的构建(包括编译、发布、自动化测试)来验证,从而尽快地发现集成错误。

  

  持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,可以确定新代码和原有代码能否正确地集成在一起。

  持续集成的好处:

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

  持续集成的目的:  

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

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

2、持续交付

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

  

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

3、持续部署

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

  

  持续部署的目标是:代码在任何时候都是可以部署的,可以进入生产阶段,持续部署的前提是能自动化完成测试、构建、部署等步骤。

4、持续交付和持续部署的区别

  CD是持续交付和持续部署,但是持续交付不等于持续部署。持续部署则是在持续交付的基础上,把部署到生产环境的过程自动化。具体区别参考下图:

  

二、持续集成的一般流程

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

(1)提交

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

(2)测试(第一轮)

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

(3)构建

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

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

  常用的构建工具主要是:jeknins、Travis、codeship等。

(4)测试(第二轮)

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

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

(5)部署

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

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

  这方面的部署工具有Ansible、Chef、Puppet等。

(6)回滚

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

三、认识DevOps 

1、DevOps是什么?

  DevOps 一词的来自于 Development(开发) 和 Operations(运维) 的组合,突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和可靠。

  目前对 DevOps 有太多的说法和定义,不过它们都有一个共同的思想:“解决开发者与运维者之间曾经不可逾越的鸿沟,增强开发者与运维者之间的沟通和交流”。

  DevOps可以用一个公式表示:文化观念的改变+自动化工具 = 不断适应快速变化的市场。

  强调:DevOps是一个框架,是一种方法论,并不是一套工具,它包括一系列的基本原则和实践。

  DevOps的核心价值:

  • 更快速地交付,响应市场的变化;
  • 更多地关注业务的改进和提升。

2、为什么需要DevOps?

(1)产品迭代 

  在现实工作中,往往都是用户不知道自己想要什么,但是当我们设计完一个产品后,他会告诉我们他们不需要什么,这样我们的产品需要反复的迭代,而且过程可能是曲折的,那我们有什么好办法快速的交付价值,灵活的响应变化呢?

  答案就是DevOps,因为DevOps是面向业务目标,助力业务成功的最佳实践。

(2)技术革新

  现在的IT技术架构随着系统的复杂化不断的革新,从最初所有服务在一个系统中,发展到现在的微服务架构、从纯手动操作到全自动流程、从单台物理机到云平台。

  

3、DevOps如何落地?

  落实DevOps的指导思想

  高效的协作和沟通、自动化流程和工具、迅速敏捷的开发、持续交付和部署、不断学习和创新。

  下面是一张来自 devops 经典著作《success with enterprise dev-ops whitepaper》的介绍图。

  

  敏捷管理:一支训练有素的敏捷开发团队是成功实施DevOps的关键。

  根据康威定律:软件团队开发的产品是对公司组织架构的反映。

  持续交付部署:实现应用程序的自动化构建、部署、测试和发布。

  通过技术工具,把传统的手工操作转变为自动化流程,这不仅有利于提高产品开发、运维部署的效率,还将减少人为因素引起的失误和事故,提早发现问题并及时地解决问题,这样也保证了产品的质量。下图展示了DevOps自动化的流程:

  

  IT服务管理(ITSM),它是传统的“IT管理”转向为“IT服务”为主的一种模式,前者可能更关注具体服务器管理、网络管理和系统软件安装部署等工作;而后者更关注流程的规范化、标准化,明确定义各个流程的目标和范围、成本和效益、运营步骤、关键成功因素和绩效指标、有关人员的责权利,以及各个流程之间的关系等,比如建立线上事故解决流程、服务配置管理流程等; 

  精益管理:建立一个流水线式的 IT 服务链,打通开发与运维的鸿沟,实现开发运维一体化的敏捷模式。

  精益生产主要来源于丰田生产方式(TPS)的生产哲学,它以降低浪费、提升整体客户价值而闻名,它主要利用优化自动化流程来提高生产率、降低浪费。所以精益生产的精髓是即时制(JIT)和自动化(Jidoka)。

  精益管理贯穿于整个DevOps阶段,它鼓励主动发现问题,不断的优化流程,从而达到持续交付、快速反馈、降低风险和保障质量的目的。

4、实施DevOps的具体方法

(1)建立快速敏捷的团队

  按照业务功能划分团队,建立沟通群组,设置产品负责人(一个策划人员)、Scrum Master(我们一般选择测试人员担任,测试驱动开发模式)和开发者团队(前端工程师、后端工程师、测试各一名),形成如下的组织结构和系统构架:

   

(2)实现自动化的流程

  直接看图说话吧,以下为一个完整DevOps的Pipeline:

  

  • 提交:工程师将代码在本地测试后,提交到版本控制系统,如Git代码仓库中。
  • 构建:持续整合系统(如Jenkins CI),在检测到版本控制系统更新时,便自动从Git代码仓库里拉取最新的代码,进行编译、构建。
  • 单元测试:Jenkins完成编译构建后,会自动执行指定的单元测试代码。
  • 部署到测试环境:在完成单元测试后,Jenkins可以将应用程序部署到与生产环境相近的测试环境中进行测试。
  • 预生产环境测试:在预生产测试环境里,可以进行一些最后的自动化测试,例如使用Appium自动化测试工具进行测试,以及与实际情况类似的一些测试可由开发人员或客户人员手动进行测试。
  • 部署到生产环境:通过所有测试后,便可以使用灰度更新将最新的版本部署到实际生产环境里。
(3)DevOps在落地实施过程中经常会遇到的问题

  人手紧缺;跨部门协作,前期沟通培训成本高;前期投入工作量大见效少。

5、DevOps技术栈 

(1)敏捷管理工具 

  Trello、Teambition、Worktile、Tower

(2)产品&质量管理 

  confluence、禅道、Jira、Bugzila。

  其中 confluence 和禅道主要是产品的需求、定义、依赖和推广等的全面管理工具;而 Jira 和 Bugzilla 是产品的质量管理和监控能力,包括测试用例、缺陷跟踪和质量监控等。

  目前使用Jira 和 禅道较多。

(3)代码仓库管理

  Git、Gitlab、Github.

  Git是一个开源的分布式版本控制系统;

  Gitlab 和 Github 是用于仓库管理系统的开源项目,它们使用Git作为代码管理工具,并在此基础上搭建起来的web服务。

(4)自动化构建脚本

  Gradle、Maven、SBT、ANT

(5)虚拟机和容器化  

  VMware、VirtualBox、Vagrant、Docker

(6)持续集成(CI)&持续部署(CD)

  Jenkins、Hudson、Travis CI、CircleCI。

  Jenkins 是一个开源软件项目,是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能,它的前身为Hudson。

  Travis CI 是目前新兴的开源持续集成构建项目,它与 jenkins 很明显的区别在于采用 yaml 格式,简洁清新独树一帜。

  CircleCI 是一个 web 应用开发者提供服务的持续集成平台,主要为开发团队提供测试,持续集成,以及代码部署等服务。

(7)自动化测试
  • Appium

    Appium是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的。可用于IOS和Android以及firefox的操作系统。

  • Selenium

    Selenium 测试直接在浏览器中运行,就像真实用户所做的一样。Selenium 测试可以在 Windows、Linux 和 Macintosh上的 Internet Explorer、Mozilla 和 Firefox 中运行。

  • Mock测试

    Mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。这个虚拟的对象就是Mock对象,Mock对象就是真实对象在调试期间的代替品。Java中的Mock框架常用的有EasyMock和Mockito等。

  • 消费者驱动契约测试

    契约测试是一种针对外部服务的接口进行的测试,它能够验证服务是否满足消费方期待的契约。当一些消费方通过接口使用某个组件的提供的行为时,它们之间就产生了契约。这个契约包含了对输入和输出的数据结构的期望,性能以及并发性。而PACT是目前比较流的消费者驱动契约测试框架。

(8)自动化运维工具
  • Ansible

  • Puppet

  • Chef

  IT运维自动化是指将IT运维中日常的、大量的重复性工作自动化,把过去的手工执行转为自动化操作。自动化是IT运维工作的升华,IT运维自动化不单纯是一个维护过程,更是一个管理的提升过程,是IT运维的最高层次,也是未来的发展趋势。下图为常用自动化运维工具对比:

  

(9)监控管理工具
  • Zabbix

    Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级开源解决方案。

  • ELK Stack日志分析系统

    ELK Stack是开源日志处理平台解决方案,背后的商业公司是Elastic。它由日志采集解析工具 Logstash、基于 Lucene 的全文搜索引擎 Elasticsearch、分析可视化平台 Kibana三部分组成。

  • 云监控(如Amazon CloudWatch)

    Amazon CloudWatch 是一项针对 AWS 云资源和在 AWS 上运行的应用程序进行监控的服务。您可以使用 Amazon CloudWatch 收集和跟踪各项指标、收集和监控日志文件、设置警报以及自动应对 AWS 资源的更改

 

 

转载于:https://www.cnblogs.com/xiugeng/p/10555847.html

前端devops——利用gitlab实现CI/CD自动化部署 Git是一个用于代码的存储和版本控制开源的分布式版本控制系统。GitLab 则是一个用于仓库管理系统的开源项目。本篇文章将讲解如何用gitlab搭建一个私有化的代码管理平台,并实现CI/CD自动化部署。由于条件限制,本篇的所有操作都在windows下执行,并使用docker进行操作。 阅读详情

相关推荐

持续集成(Continuous Integration, CI)

什么是持续集成 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。(by Martin Fowler) 持续集成的要点 自动构建过程 每次代码递交后都会在持续集成服务器上触发一次构建 自动测试的手段,除了单元测试与集成测试之外,还有额...

生活在别处 2588

DevOps—基本概念

这是这个行业演变过程,也是一个公司从成立,到发展壮大的过程,一个公司的项目管理模式演变过程是整个行业演变过程的缩影,不同阶段有不同阶段的模式,达到一定阶段才有改变的必要,不过我们如果提前有这些了解,提前有所准备,那边在转变的过程中就可以少些弯路和内耗。再后来,随着项目的再次扩大,用户对系统的需求不断增加,与此同时,用户给的时间周期却越来越少,时间周期比较长的瀑布流模式不再适用,于是就出现了“敏捷开发”,为的就是小步快跑,持续迭代,快速发现问题,快速解决问题,快速和用户、业主进行确认。

weixin_37648525的博客 9465

用Multisim仿真AD630锁定放大器:从2012年电赛A题实战到避坑指南

本文详细介绍了如何使用Multisim仿真AD630锁定放大器,从2012年电赛A题实战出发,提供完整的电路搭建、参数优化及避坑指南。重点解析AD630的开关调制架构和双相位检测的工程实现,帮助读者在强噪声背景下有效提取微弱信号,提升电子设计竞赛和工程实践中的信号处理能力。

weixin_42549451的博客 203

Devops基本概念和原理

一、什么是DevOps 1、 DevOps概述 DevOps,即Development and Operations,是一组过程、方法与系统的统称,用于促进软件开发、运维和质量保障部门之间的沟通、协作与整合。DevOps的出现是由于软件行业日益清晰的认识到:为了按时交付软件产品和服务,开发和运维工作必须紧密合作。DevOps可看作开发、运维和质量保障(QA)三者的交集。 DevOps运动源自于提高IT服务交付敏捷性的需要,早期出现在许多大型公有云服务提供商中,并被其认可。支撑DevOps的理念基础是敏捷宣

u014118698的博客 1万+

CANoe信号波形分析保姆级教程:Graphic窗口从配置到实战避坑

本文详细解析了CANoe的Graphic窗口在信号波形分析中的高效配置与实战应用技巧。从信号显示模式选择、测量光标进阶操作到信号分组策略,提供工程化解决方案,帮助工程师快速定位总线信号异常,提升汽车电子开发与测试效率。

weixin_29279047的博客 267

Ubuntu系统下主板GPU温控pwm风扇

在Linux系统下——以Ubuntu为例,配置主板sys_fan等接口连接pwm温控风扇转速根据NVIDIA GPU温度,为服务器GPU等无主动散热显卡提供散热。

罗思哲的博客 5034

Awesome Continuous Integration(持续集成利器)教程

Awesome Continuous Integration(持续集成利器)教程 项目介绍 Awesome Continuous Integration(简称 Awesome CI)是由 Cytopia 开发的一个强大的工具集合,专注于 Git 文件和静态源代码分析。它支持多种编程语言如 Ruby、Python、Docker、PHP 等,并且包括了文件分析、编码风格检查、语法检测等功能。通过这一...

gitblog_00704的博客 404

华为防火墙双线路配置实战:5分钟搞定主备自动切换(含健康检查避坑指南)

本文详细介绍了华为防火墙双线路配置实战,包括主备自动切换和健康检查机制的优化技巧。通过智能健康检查机制,华为防火墙能实现毫秒级故障自动切换,确保网络高可用性。文章提供了从架构设计到实战配置的全流程指南,并分享了常见配置误区与解决方案,帮助中小企业快速搭建稳定可靠的网络架构。

weixin_30872337的博客 605

持续集成—Continuous Integration

一、什么是持续集成? 为什么会有持续集成?我们想象一个场景,一个团队共同开发一个项目,每个人负责一个功能,一个月后大家将自己的代码合并到系统中的时候,大家想象会存在什么问题?问题就是大家需要几天时间去解决代码之间的冲突,还要解决冲突之间产生的Bug,当然还需要代码整合,这样的项目是相当危险的。 为了解决上述带来的问题,出现持续集成,之所以叫持续集成,就是每天当中都要进行多次代码的...

有道无术,术尚可求,有术无道,止于术。 705

【yolov8】与yolov5的区别及改进详解

yolov8-----有点厉害的目标检测框架.

qq_44878985的博客 3万+

(十)安卓开发中的Activity之间的通信使用详解

下面将结合代码和具体在 Android 开发中,Activity 之间的通信是非常常见且核心的功能之一使用场景,详细讲解这几种方式。

cuijiying的博客 1280

持续集成(Continuous integration,简称CI)

持续集成持续集成是什么?为什么要使用持续集成?持续交付为什么要交给质量团队或是用户呢?持续部署持续集成的流程 持续集成是什么? CI,是指在一段时间内(如:约定好的一天内或是一个上午),多次的将代码提交到主干上去。自然,每次都要通过测试。 大师Martin Fowler对持续集成是这样定义的:持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天...

落笔丶的博客 5510

方法二:旋转机械动平衡精度计算

本文以实际案例为基础,系统阐述基于ISO 1940标准的动平衡精度G GG等级计算方法。通过角速度转换、许用剩余不平衡量e p e r e_{per}e per ​ 推导及G GG等级公式应用,结合惯性力偶矩、转子质量等参数,得出某转子系统的动平衡精度为G 40 G40G40。文中详细解析了公式原理与参数单位转换要点,并附完整ISO 1940动平衡等级参考表,为工程师提供从理论到实践的完整解决方案。研究结果表明,该方法可有效量化旋转机械的平衡精度,适用于风机、泵类等中低速设备的设计与调试,对提升设备运行

weixin_46153372的博客 922

持续集成CI(Continuous integration)

持续集成作为敏捷开发的基石,被很多软件开发项目组所采用。      持续集成定义:      *什么是持续集成?* 持续集成一种软件开发实践。通过它,开发团队的成员频繁的整合他们之间的工作。它不是简单的组装软件而是软件开发过程的核心实践,通过时时运行测试,保证软件现有的功能不被破坏,自动分析现有代码的状态(有无重复逻辑,代码的复杂度,PC-lint,圈复杂度,UT覆盖率等)并发布相关的报告。这

weekend67的专栏 2304

Weka学习笔记01:初探Weka世界

下载、安装和启动Weka、Weka数据格式

howard2005的专栏 1471

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

什么是持续集成(Continuous Integration)?

什么是持续集成(Continuous Integration)

Think Different 3725

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

持续集成(Continuous Integration, CI)

鸿蒙应用通常使用`build.gradle`文件来描述项目的结构和构建逻辑。

jikuaidi6yuan的博客 1620

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

持续集成(Continuous Integration)

持续集成(Continuous Integration,简称CI)是一种软件开发实践,开发者频繁地将代码集成到共享的代码库中,每次集成都通过自动化构建和测试来验证,从而尽早发现并修复错误。CI的目标是提高软件开发的质量和效率,减少集成问题,并使软件在整个开发过程中始终保持在一个可发布的状态。

龙大的博客 1686

持续集成CI(Continuous Integration)

持续集成降低了集成代码的风险,因为你集成的是较小的变更。例如,如果生产环境是在 Kubernetes 上运行的容器,那你就应该将代码部署到 Kubernetes 容器的开发环境中。相比之下,持续集成是一种开发实践,它要求开发者频繁地将代码集成到共享存储库中,这里说的频繁,如果可能的话,是指每天都进行。观看本文后,你将能够描述持续集成(Continuous Integration)和持续交付(Continuous Delivery),解释在持续集成中使用小批量的原因,并描述持续集成的好处。

WSSWWWSSW的博客 2124

初识持续集成(Continuous Integration)

随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题。尤其是近些年来,敏捷(Agile) 在软件工程领域越来越红火,如何能再不断变化的需求中快速适应和保证软件的质量也显得尤其的重要。 持续集成正是针对这一类问题的一种软件开发实践。它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多次集成。而每次的集成都是通过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件。

buger的专栏 2341

Martin Fowler 谈软件持续集成(Continuous Integration)

Martin Fowler 谈软件持续集成(Continuous Integration)  在软件行业发展的初期,软件项目中最棘手、最紧张的时刻就是集成。能单独工作的一些模块被组装在一起,然而系统整体却常常失败,而且很难找到失败的原因。但在最近几年里,集成基本上已不再是项目中的痛苦之源,变成了“小事一桩”。这种转变的关键在于更为频繁地进行集成。曾经人们认为日构建是一个较难做到的目标。

华章IT官方博客 4216

Docker continuous integration 持续集成的实现

CI 持续集成:编写代码时完成一个功能后,立马提交代码到Git仓库中,将项目重新构建并测试。这样可以快速发现错误。防止代码偏离主题。 Ⅰ. 搭建Gitlab服务器 1.虚拟机环境 创建一个全新的虚拟机,并且至少指定4G运行内存。Linux系统为CentOS7 2.安装docker及docker-compose https://blog.youkuaiyun.com/sabot_v/article/details/108735570 3.使用docker-compose.yml文件安装gitlab 进入/.

sabot_v的博客 217

探索高效能持续集成:Bazelbuild/Continuous-Integration

探索高效能持续集成:Bazelbuild/Continuous-Integration 1. 项目介绍 Bazelbuild/Continuous-Integration 是一个由 Bazel 团队维护的开源项目,旨在提供一套强大的持续集成和持续部署(CI/CD)解决方案。这个平台专为大规模软件开发设计,确保代码质量和一致性,并加速开发流程。通过利用 Buildkite 平台,该项目实现了自动化测...

gitblog_00077的博客 336
上一篇: 部署基于python语言的WEB发布环境
下一篇: ssh和scp详解
anmi3721
博客等级 码龄11年 23粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值