常识三持续集成、持续交付、持续部署

简介: 概念假如把开发工作流程分为以下几个阶段:编码 -> 构建 -> 集成 -> 测试 -> 交付 -> 部署

概念

假如把开发工作流程分为以下几个阶段:

编码 -> 构建 -> 集成 -> 测试 -> 交付 -> 部署

image.png

正如你在上图中看到,「持续集成(Continuous Integration)」、「持续交付(Continuous Delivery)」和「持续部署(Continuous Deployment)」有着不同的软件自动化交付周期。

“持续集成”一词来源与极限编程(Extreme Programming),

作为它的12个实践原则之一出现。

ThoughtWorks首席科学家、软件开发领域大事Martin Fowler对持续集成是这样定义的:

持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味置顶每天可能发生多次集成。每次集成都是通过自动化的构建(包括编译、发布、自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大的减少集成的问题,让团队能够更快的开发内聚的软件。

从上面的定义可以看出,一个典型的持续集成周期包括以下几个步骤:

  1. 版本控制服务器上有最新的代码
  2. 持续集成服务器从版本控制服务器下载最新的代码
  3. 等代码完全更新以后,调用自动化编译脚本,进行代码编译
  4. 运行所有的自动化测试(单元测试、接口测试、系统级别的UI自动化测试等)
  5. 将结果写入报告文件中,反馈给团队成员
  6. 如果构建失败,必须尽快修改确保下次构建成功
  7. 产生可执行的软件版本,提供给测试人员进行测试

持续集成框架是由代码提交活定时来触发的(项目级别的持续集成可以由开发每次代码提交触发,而产品级别的持续集成可以由定时来触发),每次提交到版本控制服务器上的代码都要经过自动化构建,确保每次的代码变更都不会导致持续集成失败。

image.png

「持续集成(Continuous Integration)」

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

image.png

「持续交付(Continuous Delivery)」

持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的 Staging 环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境中。

image.png

「持续部署(Continuous Deployment)」

持续部署则是在持续交付的基础上,把部署到生产环境的过程自动化。

image.png

三者关系

持续交付、持续部署

将持续集成扩充到部署到生产环境就是持续交付和持续部署的概念,二者的区别

image.png

手动与自动的区别

CI步骤

image.png

CI的价值

开发人员对下面的软件开发场景很熟悉,比如:

场景一:开发了新功能,老功能产生新的 bug;

场景二:修好一个 bug,又产生其他 bug,甚至出现连环 bug;

场景三:出现的 bug 比较多,修改代码要很谨慎,不熟悉的模块一般不敢动,怕引起问题;

持续集成是如何缓解这个问题,Martin Fowler 大师曾经说过:

“Continuous Integration doesn’t get rid of bugs, but it does make them dramatically easier to find and remove.” — Martin Fowler

如上面所说,持续集成不能消除 bug ,但能更容易地发现 bug,更快速地修复,提升产品质量。那么,持续集成能给我们带来哪些价值?

image.png

引入了CI(Continuos Integration,即持续集成)以后,每个开发人员在提交代码的时候都会自动进行构建,包括代码审查、编译、单元测试、打包、功能测试等。这样保证了开发人员的每次提交都是安全的。打包生成的文件随时可以被测试人员拿去测试。如果需要给客户演示功能,也只需从CI服务器上直接获取指定的打包完成的文件即可。

CI的好处多多。

减少风险

缺陷的检测和修复变得更快,让寻找和修改bug的工作变简单(只修改系统一小部分,无需看太多代码。由于提交后就可以得到反馈,记忆很新鲜,可以进行差异调试。)同时过早的引入集成,使我们能更好的审视各个模块的接口是否满足要求,减少项目中的假定。

减少重复过程

由于CI将大量的工作给自动化了,那么可以让人们有时间做更多的需要动脑筋的、更高价值的工作。而且通过对重要过程自动化,克服了项目中某些成员对实现改进的抵制,有利于持续集成的推进。这样就形成了一个良性循环。

在任何时间、任何地点生成可部署的软件

对于客户来说,可以部署的软件是最实际的资产。而CI则可以轻松做到这一点。

增强项目的可见性

通过对CI服务器的监控,可以随时了解项目的趋势。CI上的红色或绿色表示了当前项目的健康程度。每一个功能的交付都经历了单元测试或集成测试的考验。

对开发团队的软件产品建立起更强大的产品信心

CI可以防止破窗综合症,让开发团队一点点积累起对产品的信息。


目录
相关文章
|
27天前
|
数据管理 测试技术 持续交付
深入理解软件测试中的持续集成与持续部署
在现代软件开发实践中,持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)是提升开发效率、保障产品质量的关键环节。本文将深入探讨CI/CD的概念、实施策略及其在软件测试中的作用,旨在为读者揭示如何通过有效的自动化流程来优化测试活动,减少人为错误,并实现快速反馈和迭代。文章还将讨论面临的挑战和可能的解决方案,以期帮助团队构建更加健壮的开发和测试环境。
|
jenkins Java Shell
jenkins实现持续集成、持续部署
想要利用jenkins实现持续集成、持续部署,首先我们先思考需要jenkins帮我们做些什么事情才能达到这个目的。首先开发人员提交了代码jenkins应该知道这个变动;其次jenkins知道代码变更后,想要拉取代码,此时要求jenkins服务器上也要有代码拉取的终端,比如git、gitee等;再其次拉取完代码后jenkins就需要打包这些代码成为jar包或者war包,这就需要maven、gradle等打包工具;再然后jenkins需要将这些jar包部署到目标服务器,那就需要相应的插件和脚本来部署这些jar或者war包。
441 1
jenkins实现持续集成、持续部署
|
27天前
|
运维 监控 Devops
构建高效自动化运维体系:基于容器技术的持续集成与持续部署实践
在数字化转型的浪潮中,企业的IT基础设施和软件交付模式正经历着深刻的变革。传统的运维方式已难以满足快速迭代、灵活扩展的现代业务需求。本文将探讨如何通过容器技术实现高效的自动化运维体系,重点分析持续集成(CI)与持续部署(CD)的实践方法及其对企业运维效率的影响。通过引入微服务架构、容器编排、DevOps文化等概念,我们旨在为读者提供一套全面的自动化运维解决方案,以支持业务的敏捷性和可扩展性。
|
29天前
|
敏捷开发 监控 Devops
深入理解软件测试中的持续集成与持续部署(CI/CD)
【2月更文挑战第30天】 在快速发展的软件开发周期中,持续集成(Continuous Integration, CI)与持续部署(Continuous Deployment, CD)已成为确保产品质量和加快交付速度的重要实践。本文旨在探讨CI/CD在软件测试领域中的应用与挑战,解析其对测试流程、自动化及团队协作的影响,并分享最佳实践案例。通过深入了解CI/CD,测试人员可以更好地适应敏捷开发模式,提高测试效率,降低发布风险。
24 1
|
8月前
|
Kubernetes 持续交付 开发者
使用 Docker 和 Kubernetes 实现持续集成和持续部署(CI/CD)
使用 Docker 和 Kubernetes 实现持续集成和持续部署,可以为开发团队带来更高效、稳定的交付流程。这种自动化的部署方式能够显著提高交付速度、降低发布风险,并为应用的扩展和管理提供了强大的工具。然而,构建一个完善的 CI/CD 环境需要根据团队的需求和实际情况进行调整和优化。
294 1
使用 Docker 和 Kubernetes 实现持续集成和持续部署(CI/CD)
|
9月前
|
jenkins Java 应用服务中间件
SpringBoot+Jenkins+Github+Docker+Maven持续集成CI与持续部署CD全自动化部署
我们采用tomcat运行war包的这种方式,先来到官网下载war包:https://www.jenkins.io/download/ 然后把war包上传到tomcat的webapps里,自动就解压运行了,访问页面,然后查看并输入密码: cat /root/.jenkins/secrets/initialAdminPassword
155 0
|
10月前
|
敏捷开发 Kubernetes Cloud Native
Web开发者的云原生指南(5)持续集成与持续部署
在本节中,我们将介绍持续集成与持续部署的概念以及与之相关的关键主题。我们将详细探讨构建与测试的自动化、持续集成工具和流程、持续部署工具和流程,以及持续交付和滚动升级的实践。
172 0
|
12月前
|
监控 测试技术 程序员
732.【chatGTP】测试工作人员如何使用容器云持续集成,持续部署?
732.【chatGTP】测试工作人员如何使用容器云持续集成,持续部署?
116 0
|
SQL Kubernetes Java
使用流水线插件实现持续集成、持续部署
本文将介绍使用流水线插件部署 RuoYi SpringBoot 项目,并实现提交代码后自动构建、自动部署。
|
运维 测试技术 持续交付
微服务项目部署实践:使用Gitlab Runner实现微服务项目的持续集成,持续交付和持续部署
本文通过详细的步骤一步一步说明在微服务架构的项目中如何进行项目部署的操作实践,通过Gitlab实现项目的持续集成,持续部署和持续交付。详解介绍的Gitlab中实现项目持续部署的工具GitLab Runner的具体使用步骤。通过这篇文章,可以熟悉微服务项目持续集成,持续交付和持续部署,学会使用GitLab Runner的具体使用方式,极大简化微服务项目的部署。
744 0
微服务项目部署实践:使用Gitlab Runner实现微服务项目的持续集成,持续交付和持续部署