0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文教你分清持续集成,持续交付,持续部署

马哥Linux运维 来源:马哥Linux运维 2023-06-25 17:17 次阅读

总结

持续集成(CI)是一种开发实践,其中开发人员经常(最好每天几次)将代码集成到共享存储库中。然后可以通过自动构建和自动测试来验证每个集成。尽管自动化测试不是严格意义上的CI的一部分,但通常隐含了它。 定期集成的主要好处之一是,您可以快速检测到错误并更轻松地定位它们。由于引入的每个更改通常很小,因此可以快速查明引入缺陷的特定更改。 近年来,CI已成为软件开发的最佳实践,并遵循一系列关键原则。其中包括版本控制,构建自动化和自动化测试。 此外,持续部署和持续交付已成为最佳实践,可让您随时随地部署应用程序,甚至在每次引入新更改时甚至将主代码库自动推入生产环境。这使您的团队可以快速行动,同时保持可以自动检查的高质量标准。

d7079c34-11db-11ee-962d-dac502259ad0.png

CI/CD应用场景:

开发人员将本地代码上传gitlab版本服务器

jenkins通过webhook插件自动到gitlab服务器拉取最新代码

通过docker-maven-plugin插件自动编译代码

将自定义镜像上传docker私服仓库

k8s集群自动拉取最新版本镜像

自动化部署整个项目

用户通过nginx负载均衡访问整个项目

d726816c-11db-11ee-962d-dac502259ad0.png

什么是持续集成、持续交付和持续部署 ?

持续集成(CI)

是一种开发实践,要求开发人员每天多次将代码集成到共享存储库中(GitLab)。

开发人员通常使用称为CI Server的工具来进行构建和集成。CI要求自检代码。这是用于自我测试以确保其按预期工作的代码,这些测试通常称为单元测试。集成代码后,当所有单元测试通过时,将得一个最新的的代码版本。这表明他们已经验证了自己的更改已成功集成到一起,并且代码按测试期望的那样工作。

d742a180-11db-11ee-962d-dac502259ad0.png

从图例上来看持续集成的流程就十分清晰了:

开发人员提交代码到 Source Repository (源代码仓库),并通过 git hook 等

触发 CI Server(持续集成服务器)的相关功能。执行 编译 -> 测试 -> 输出结果的流程,

向开发人员反馈结果的 report

可以看出,持续集成的核心在于确保新增的代码能够与原先代码正确的集成。与后续要介绍的持续交付以及持续部署,其最主要的差别也就在于其目标不同。

连续交付(CD)

是一种软件工程方法,团队可以在短时间内将软件部署到生产环境,确保在任何时候可靠地发布软件,并且在发布软件时可以手动进行。

持续交付意味着每次更改代码,集成并构建代码时,他们还将在与生产非常相似的环境中自动测试该代码。我们将此部署到不同环境并在不同环境上进行测试的过程称为部署管道。部署管道通常具有开发环境,测试环境和过渡环境,但是这些阶段因团队,产品和组织而异。

与持续集成相比,持续交付的侧重点在于交付,其核心对象不在于代码,而在于可交付的产物。由于持续集成仅仅针对于新旧代码的集成过程执行了一定的测试,其变动到持续交付后还需要一些额外的流程。

d761439c-11db-11ee-962d-dac502259ad0.png

可以看到,与持续集成 相比较,持续交付 添加了 Test -> Staging -> Production 的流程,也就是为新增的代码添加了一个保证:确保新增的代码在生产环境中是可用的。

在这一增加的流程中,Test 环节不仅仅包含基本的单元测试,还需要延伸到更为复杂的功能测试以及集成测试等。在这里,Staging 指的是 类生产环境 ,其尽可能的对真实的网络拓扑、数据库数据以及硬件设备等资源进行模拟,从而为测试人员反馈代码在生成环境中的可能表现。流程中每一个环节的执行结果都会对开发人员进行反馈,每一个出现的错误都会导致版本的回滚。当测试完毕确认无误之后,将由相关人员对其进行手动部署到生产环境。

持续部署

持续部署意味着:通过自动化部署的手段将软件功能频繁的进行交付。 在这种实践中,团队负责人所做的每一项更改都通过了所有测试阶段,并自动投入生产。要实现连续部署,团队负责人首先需要进行连续交付。

d781254a-11db-11ee-962d-dac502259ad0.png

可以看到,同持续交付相比 持续集成 的区别体现在对 Production 的自动化。从开发人员提交代码到编译、测试、部署的全流程不需要人工的干预,完全通过自动化的方式执行。这一策略加快了代码提交到功能上线的速度,保证新的功能能够第一时间部署到生产环境并被使用。

DevOps概述

介绍完了持续集成、持续交付和持续部署三大件,接下来在讲讲 DevOps。与三大件不同,DevOps 更偏向于一种对于文化氛围的构建。

DevOps 一词本身是对于 development 以及 operation 两个词的混合,其目的在于缩短系统开发的生命周期,在这过程中发布特性、修复bug以及更新均被紧密的结合。

听起来似乎有点玄乎,可以这样理解:DevOps 也即是促使开发人员与运维人员之间相互协作的文化。

DevOps 的概念似乎与持续交付的概念有些类似,两者均旨在促进开发与运维之间的协作,但是实际上两者差别很大:DevOps 更偏向于一种文化的构建,在 DevOps 文化指导下,团队中将包含了具有不同技能的人员(开发、测试等),并通过自动化测试与发布的手段,更快、更高质量的生产软件。

d7a01450-11db-11ee-962d-dac502259ad0.png

d7c2232e-11db-11ee-962d-dac502259ad0.png

在传统的团队组织方式中,开发人员与运维人员之间是割裂开的,软件开发流程被分割为多个独立环节,分别由不同的人员执行。这使得软件开发过程中需要付出高昂的沟通成本,层层手动的流程将大量的时间耗费在了重复的劳动中。

在 DevOps 的指导下,不同技能的人员处在同个团队中,为了一个共同的软件开发目标而工作,更好的协同工作与自动化的手段能够优化整个 Code -> Build -> Test -> Release -> Operate -> Code 的循环。这一理念看起来很美,用图画来说明就构成了一个和谐友好的大圈。

DevOps文化通常与持续交付相关联,因为它们都旨在增强开发人员和运营团队之间的协作,并且都使 用自动流程来更快,更频繁,更可靠地构建,测试和发布软件。这些都是像我们这样的人想要的东西。尽管开发团队经常没有看到流程改进的最直接好处,但CI,CD和DevOps对我们其他人来说却有很多好处。简而言之,我相信实践CD并拥护DevOps文化的组织将更频繁地向其客户提供更有价值,更可靠的软件。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 自动化
    +关注

    关注

    29

    文章

    5566

    浏览量

    79258
  • 代码
    +关注

    关注

    30

    文章

    4786

    浏览量

    68552
  • devops
    +关注

    关注

    0

    文章

    113

    浏览量

    12021

原文标题:一文教你分清持续集成,持续交付,持续部署

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    6.6持续集成交付

    软件工程
    jf_75936199
    发布于 :2023年03月08日 00:43:50

    AliOS Things 持续集成(CI)系统介绍

    摘要: AliOS Things在快速的迭代进化之中,如何保证提交的代码质量,并保证在各个硬件平台上的稳定性,是个非常大的挑战。同时物联网硬件碎片化,资源紧张,对持续集成(CI)系统也提出了特殊
    发表于 01-26 15:34

    什么样的持续交付工具和平台最适合你的组织?

    能力和灵活性不足。很多活动都需要在些模型的概念下进行。那么来聊聊吧你的组织规模如何,你在组织内的角色是什么正在使用什么样的持续交付工具链,又遇到什么问题是否使用了云平台,你的工具链和云平台的
    发表于 05-02 14:18

    有方法与XC8持续集成

    你好,有没有种方法可以在持续集成的环境中构建些项目,比如GITLAB跑步者?这样,我们将能够自动生成最新的通用XC版本的HEX文件。 以上来自于百度翻译 以下为原文 Hell
    发表于 09-26 17:26

    介绍个RT-Thread进行持续集成的容器化Linux环境

    RT-Thread Linux CI Environment个用于嵌入式实时操作系统 RT-Thread 进行持续集成的容器化环境。使用步骤:拉取并启动镜像 maikebing
    发表于 07-28 10:51

    如何在持续集成开发流程中使用Jenkins和Docker?

    本指南介绍了如何在持续集成开发流程中使用Jenkins和Docker。 本指南的受众是嵌入式软件开发人员。在指南中,我们还讨论了测试平台的主题,强调了使用Arm Fast Model技术的虚拟硬件
    发表于 08-02 10:50

    在Jenkins管理的持续集成境引入Docker来优化资源配置

    Jenkins是被广泛应用的持续集成、自动化测试、持续部署的框架,甚至有些项目组顺便将其用来做流程管理的工具。根据任务的多寡,Jenkins通常有两种典型的部署方式。 单节点(Mast
    发表于 09-26 11:42 0次下载
    在Jenkins管理的<b class='flag-5'>持续集成</b>境引入Docker来优化资源配置

    实例分析无线持续交付平台 MCD 的实践应用

    。如果没有个有效的无线持续交付平台,很难实现大版本的集成发布在 3 天内完成。而对比市场上开源的无线持续集成工具 Fastlane、Tes
    发表于 09-30 13:36 3次下载
    实例分析无线<b class='flag-5'>持续</b><b class='flag-5'>交付</b>平台 MCD 的实践应用

    使用Docker实现持续集成

    本文转载自《程序员》,谢绝转载,更多精彩,请订阅2016年《程序员》 持续集成(Continuous Integration,简称CI)作为先进的项目实践之,近年来逐渐受到国内软件公司的重视;但对
    发表于 10-10 10:26 0次下载
    使用Docker实现<b class='flag-5'>持续集成</b>

    jenkins持续集成原理

    本文详细介绍了jenkins持续集成原理。持续集成就是为解决程序代码提交质量低,提交内容导致原有系统的bug,按时或按需自动编译版本,自动进行自动化测试。
    的头像 发表于 02-06 11:43 4089次阅读

    关于持续集成与基于模型的设计的分析和应用

    在实际的工程项目中,随着项目和人员的扩展,越来越多的开发人员会利用合适的代码版本管理和持续集成工具进行并行开发。Git、GitLab、Jenkins这个组合适用于任意大小规模的持续集成开发模式。持续集成也是敏捷开发的
    的头像 发表于 09-12 09:10 2192次阅读
    关于<b class='flag-5'>持续集成</b>与基于模型的设计的分析和应用

    持续集成持续部署助于敏捷开发概念的出现

      由于数字世界的迅速扩散和广泛的可访问性,软件开发项目中传统的时间框架和顺序过程不再有效。这些有助于敏捷开发概念的出现,例如测试自动化、持续集成持续部署
    的头像 发表于 12-09 15:14 677次阅读

    持续集成构建状态信号量开源硬件

    电子发烧友网站提供《持续集成构建状态信号量开源硬件.zip》资料免费下载
    发表于 12-23 17:42 0次下载
    <b class='flag-5'>持续集成</b>构建状态信号量开源硬件

    高质量持续集成:VectorCAST与Jenkins实战指南

    持续集成(ContinuousIntegration,简称CI)是种软件开发/测试方法。它要求开发及测试人员频繁地将代码提交到用于共享的开发分支中,经过充分的测试和审查,然后通过自动化的构建和测试
    的头像 发表于 09-28 08:27 1265次阅读
    高质量<b class='flag-5'>持续集成</b>:VectorCAST与Jenkins实战指南

    INTEWORK—PET 汽车软件持续集成平台

    INTEWORK-PET-CI是经纬恒润自主研发的汽车软件持续集成&持续交付平台,在传统的持续集成基础上深化了研运体化(DevOps)的概
    的头像 发表于 01-19 11:04 591次阅读
    INTEWORK—PET 汽车软件<b class='flag-5'>持续集成</b>平台