前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >常识三持续集成、持续交付、持续部署

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

作者头像
码农戏码
发布2021-03-23 10:21:29
1.6K0
发布2021-03-23 10:21:29
举报
文章被收录于专栏:DDD

概念

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

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

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

“持续集成”一词来源与极限编程(Extreme Programming), 作为它的12个实践原则之一出现。

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

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

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

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

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

「持续集成(Continuous Integration)」

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

「持续交付(Continuous Delivery)」

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

「持续部署(Continuous Deployment)」

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

三者关系

持续交付、持续部署

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

手动与自动的区别

CI步骤

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,更快速地修复,提升产品质量。那么,持续集成能给我们带来哪些价值?

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

CI的好处多多。

减少风险

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

减少重复过程

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

在任何时间、任何地点生成可部署的软件 对于客户来说,可以部署的软件是最实际的资产。而CI则可以轻松做到这一点。

增强项目的可见性

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

对开发团队的软件产品建立起更强大的产品信心 CI可以防止破窗综合症,让开发团队一点点积累起对产品的信息。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-09-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农戏码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概念
    • 「持续集成(Continuous Integration)」
      • 「持续交付(Continuous Delivery)」
        • 「持续部署(Continuous Deployment)」
        • 三者关系
          • CI步骤
          • CI的价值
          相关产品与服务
          持续集成
          CODING 持续集成(CODING Continuous Integration,CODING-CI)全面兼容 Jenkins 的持续集成服务,支持 Java、Python、NodeJS 等所有主流语言,并且支持 Docker 镜像的构建。图形化编排,高配集群多 Job 并行构建全面提速您的构建任务。支持主流的 Git 代码仓库,包括 CODING 代码托管、GitHub、GitLab 等。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档