Devops与CI、CD

一、DevOps

定义:

DevOps 是 "Development"(开发)和 "Operations"(运维)两个词的组合,代表了一种文化、运动或实践,其目的是缩短软件开发生命周期中的系统开发与系统运维之间的隔阂,从而实现更高效的软件交付和更高的软件质量。

核心概念:

自动化、持续集成、持续交付等。

目标:

通过改进和优化开发与运维团队的协作,来更快速、更频繁且更可靠地构建、测试和发布软件

二、CI (持续集成 Continuous Integration)

定义:

持续集成是一种软件开发实践,开发人员经常需要将代码集成到共享的主分支或代码库中,而每次集成要通过自动化的构建(包括编译、测试等步骤)来验证,从而尽早发现并定位错误。

关键要点:

经常性地向主分支提交代码

自动执行构建和测试,确保每次提交都不会破坏现有的功能

尽早发现并修复错误,使得维护成本降低

相关工具:DevTools、Jenkins等。

三、CD

CD 可以代表两个相关但略有不同的概念:持续交付(Continuous Delivery)和持续部署(Continuous Deployment)。尽管它们都是 CI(持续集成)的自然延伸,但它们在实施时有所不同。简而言之,持续交付确保你可以随时部署,而持续部署确保每次正确变更都能自动部署。

1.持续交付 (Continuous Delivery):

定义:

这是一种软件开发实践,确保软件总是处于可以部署到生产环境的状态。一旦通过了所有的 CI 流程,新的代码更改就可以被认为是准备好部署到生产的。但这一部署步骤通常还需要手动触发。

关键要点:

自动化测试与构建后,生成的构建产物(例如:jar, war, docker容器)准备好可以被手动部署到生产环境

确保软件始终处于可部署状态

短时间内频繁地进行小的发布,减少发布风险

进入生产的部署还是手动的,即团队可以决定何时部署

目的:

快速、可靠地构建和验证完整的发布流程。

2.持续部署 (Continuous Deployment):

定义:

这是一种软件发布策略,其中每次代码更改都会自动通过流水线进行部署,无需人工干预即可进入生产环境。

关键要点:

与持续交付相似,但区别在于部署到生产的步骤是自动化的

高度自动化,部署速度快

其中新的更改不仅仅是“可以被部署”,它们实际上会自动部署到生产环境,无需人工干预

每次更改都直接进入生产环境,因此需要有一个强大的测试套件和监控能力,以确保没有问题

目的:

确保软件更改更快速、频繁地达到用户手中,从而更快地收到反馈。

 =>为了实现 CD,团队需要采用自动化测试、自动化部署、功能切换、强大的监控和日志记录等工具和实践。

四、测试与Devops和CI/CD的关系

1.集成测试与 CI:

持续集成(CI)要求在每次代码提交后进行自动化构建和测试,以确保新的更改不会破坏现有功能。因此,自动化测试,尤其是单元测试和集成测试,在此处至关重要。

2.验收测试与 CD:

持续交付和持续部署(CD)要求软件始终处于可部署状态。为此,除了单元和集成测试外,还需要进行自动化的验收和功能测试,以确保满足用户需求和业务逻辑。

3.监控与 DevOps:

DevOps 文化强调开发和运维之间的协作。一旦代码部署到生产环境,监控和日志分析成为了“测试”的重要部分,用于确保系统稳定运行并及时捕获问题。

4.快速反馈:

DevOps 和 CI/CD 的一个主要目标是提供快速反馈。当构建存在问题时,它可以快速地通知团队。

再通俗地解释下这几个名词

DevOps:

想象一下制作一道菜的过程。通常,一个人负责准备食材(开发者),另一个人负责烹饪(运维人员)。在传统的环境中,两人可能互相投诉:“你准备的食材不对!”或“你不知道如何正确地烹饪!”。而 DevOps 就像是让这两个人紧密合作,确保食材的准备与烹饪过程无缝对接,最终更快速、更高效地完成一道菜。

CI(持续集成):

假设你正在搭建一座乐高塔。每次你添加一个新的乐高块,你都要确保它与其他块完美匹配,并且不会导致整个塔倒塌。持续集成就是每次你加一个新块时,都立刻检查塔是否稳定,而不是等加了很多块后再检查。

CD(持续交付/部署):

继续使用乐高塔的比喻。假设你不仅要搭建这个塔,还要展示给观众。持续交付意味着,每当你添加新的乐高块并确认它稳定后,你就已经准备好将它展示给观众,但观众还不能看到。而持续部署则是每次添加新的乐高块并确认稳定后,观众就立刻可以看到你的变化。

简而言之,DevOps 是让制作食物的过程更流畅的合作方式;CI 是确保你的乐高塔每加一块就检查是否稳定;而 CD 则是决定你何时把乐高塔展示给观众。其中DevOps 包含了 CI(持续集成)和 CD(持续交付和/或持续部署)。

再解释下其中说的“构建”

"构建" 在软件开发中是一个专业术语,但它的意思比较直观。在此上下文中,构建通常涉及以下几个步骤:

  1. 代码编译:将开发者写的源代码(例如 Java、C++ 或其他编程语言的代码)转换为机器可以执行的二进制代码或字节码。

  2. 依赖管理:自动化地下载和集成项目所需的所有库和依赖。

  3. 链接:对于某些编程语言(如 C++),在编译后还需要一个链接步骤,将各个编译后的部分组合成一个可执行文件。

  4. 资源处理:集成像图像、音频或其他非代码资源。对于 Web 开发,这可能还包括压缩 JavaScript 或 CSS 文件,将它们转换为更高效的格式供浏览器使用。

  5. 打包:将编译后的代码、库和资源打包成一个或多个文件,这些文件可以部署到服务器或设备上执行。

  6. 其他自动化任务:例如,为代码生成文档、执行静态代码分析等。

当我们说“自动执行构建”时,我们通常指的是使用工具(如 Jenkins、Travis CI、Gradle、Maven 等)自动化上述构建步骤,从而确保每次提交的代码都被正确地编译、链接、打包,最终形成一个可以部署或运行的软件产品。这种自动化确保了每次代码更改后,团队都可以迅速得知是否有任何错误或问题,这样它们可以快速地被修复。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值