Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >什么是 CI/CD?

什么是 CI/CD?

作者头像
LinuxSuRen
修改于 2019-04-18 08:17:07
修改于 2019-04-18 08:17:07
17.5K0
举报
文章被收录于专栏:JenkinsJenkins

本文首发于:Jenkins 中文社区

CI/CD 的出现改变了开发人员和测试人员发布软件的方式。本文是描述这一变化的系列文章第一篇,

这些文章将提供各种工具和流程的讲解,以帮助开发人员更好的使用 CI/CD。

从最初的 瀑布模型

到后来的 敏捷开发

再到今天的 DevOps

这是现代开发人员构建出色产品的技术路线。

随着 DevOps 的兴起,出现了持续集成,持续交付(CI/CD)和持续部署的新方法,

而传统的软件开发和交付方式在迅速变得过时。过去的敏捷时代里,

大多数公司的软件发布周期是每月、每季度甚至每年(还记得那些日子吗?),

而在现在 DevOps 时代,每周、每天甚至每天多次都是常态。

SaaS 成为业界主流后尤其如此,您可以轻松地动态更新应用程序,

而无需强迫用户下载更新组件。很多时候,用户甚至都不会注意到正在发生变化。

开发团队通过软件交付流水线(Pipeline)实现自动化,以缩短交付周期,

大多数团队都有自动化流程来检查代码并部署到新环境。

我们一直在关注自动化测试流程,但这将在之后的文章中介绍。

今天,我们将介绍什么是 CI/CD/CD ,以及现代软件公司如何使用工具将部署代码的流程自动化。

持续集成注重将各个开发者的工作集合到一个代码仓库中,通常每天会进行几次,

主要目的是尽早发现集成错误,使团队更加紧密结合,更好地协作。

持续交付的目的是最小化部署或发布过程中团队固有的摩擦,

它的实现通常能够将构建部署的每个步骤自动化,以便任何时刻能够安全地完成代码发布(理想情况下)。

持续部署是一种更高程度的自动化,无论何时代码有较大改动,

都会自动进行构建/部署。

以上的每一个阶段都是交付流水线的一部分。

Humble 和 Ferley

在他们的书作《持续交付:通过自动化构建、测试和部署实现可靠软件版本发布》中解释说:

「对软件的每次更改都要经过一个复杂的过程才能发布,该过程包括多个测试和部署阶段进行软件的构建。

反过来看,这个过程需要许多人之间的合作,甚至可能需要几个团队间合作。

部署流水线对这一过程进行建模,并且它的持续集成和发布管理工具能让您在代码从版本控制转移到各种测试和部署时,

查看和控制每次更改的过程。」

持续集成(CI)

通过持续集成,开发人员能够频繁地将其代码集成到公共代码仓库的主分支中。

开发人员能够在任何时候多次向仓库提交作品,而不是独立地开发每个功能模块并在开发周期结束时一一提交。

这里的一个重要思想就是让开发人员更快更、频繁地做到这一点,从而降低集成的开销。

实际情况中,开发人员在集成时经常会发现新代码和已有代码存在冲突。

如果集成较早并更加频繁,那么冲突将更容易解决且执行成本更低。

当然,这里也有一些权衡,这个流程不提供额外的质量保障。

事实上,许多组织发现这样的集成方式开销更大,因为它们依赖人工确保新代码不会引起新的 bug 或者破坏现有代码。

为了减少集成期间的摩擦,持续集成依赖于测试套件和自动化测试。

然而,要认识到自动化测试和持续测试是完全不同的这一点很重要,我们会在文章结尾处详细说明。

CI 的目标是将集成简化成一个简单、易于重复的日常开发任务,

这样有助于降低总体的构建成本并在开发周期的早期发现缺陷。

要想有效地使用 CI 必须转变开发团队的习惯,要鼓励频繁迭代构建,

并且在发现 bug 的早期积极解决。

持续交付(CD)实际上是 CI 的扩展,其中软件交付流程进一步自动化,以便随时轻松地部署到生成环境中。

成熟的持续交付方案也展示了一个始终可部署的代码库。使用 CD 后,软件发布将成为一个没有任何紧张感的例行事件。

开发团队可以在日常开发的任何时间进行产品级的发布,而不需要详细的发布方案或者特殊的后期测试。

CD 集中依赖于部署流水线,团队通过流水线自动化测试和部署过程。此流水线是一个自动化系统,

可以针对构建执行一组渐进的测试套件。CD 具有高度的自动化,并且在一些云计算环境中也易于配置。

在流水线的每个阶段,如果构建无法通过关键测试会向团队发出警报。否则,将继续进入下一个测试,

并在连续通过测试后自动进入下一个阶段。流水线的最后一个部分会将构建部署到和生产环境等效的环境中。

这是一个整体的过程,因为构建、部署和环境都是一起执行和测试的,它能让构建在实际的生产环境可部署和可验证。

AWS 上提供了可靠的当前 CI/CD 的展示,亚马逊是云计算的提供商之一,提供出色的 CI/CD 流水线环境和实验过程,

有众多开发资源可供选择,您可以将它们在一个易于配置和监控的流水线中组合起来。

许多人认为持续交付的吸引力主要在于,它自动化了从提交代码到仓库,再到测试和发布产品过程的所有步骤。

这是构建和测试过程细致的自动化,但是如何发布以及发布什么仍然是需要人工操作,持续部署可以改变这一点。

持续部署(CD)

持续部署扩展了持续交付,以便软件构建在通过所有测试时自动部署。在这样的流程中,

不需要人为决定何时及如何投入生产环境。CI/CD 系统的最后一步将在构建后的组件/包退出流水线时自动部署。

此类自动部署可以配置为快速向客户分发组件、功能模块或修复补丁,并准确说明当前提供的内容。

采用持续部署的组织可以将新功能快速传递给用户,得到用户对于新版本的快速反馈,并且可以迅速处理任何明显的缺陷。

用户对无用或者误解需求的功能的快速反馈有助于团队规划投入,避免将精力集中于不容易产生回报的地方。

随着 DevOps 的发展,新的用来实现 CI/CD 流水线的自动化工具也在不断涌现。这些工具通常能与各种开发工具配合,

包括像 GitHub 这样的代码仓库和 Jira 这样的 bug 跟踪工具。此外,随着 SaaS 这种交付方式变得更受欢迎,

许多工具都可以在现代开发人员运行应用程序的云环境中运行,例如 GCP 和 AWS。

最受欢迎的自动化工具是 Jenkins(以前的 Hudson),

这是一个由数百名贡献者和商业公司 Cloudbees 支持的开源项目。

Cloudbees 甚至聘请了 Jenkins 的创始人,并提供了一些 Jenkins 培训项目和附加组件。

除了开源项目之外,还有一些更现代化的商业产品例如 CircleCI,Codeship 和 Shippable。

这些产品各有优缺点,我鼓励开发人员在开发流程中一一尝试它们,以了解它们在您的环境中的工作方式,

以及它们如何与您的工具、云平台、容器系统等协作。

在 mabl 中,我们在 Google Cloud Platform 上进行构建

因此,我们正在寻找与 GSP 兼容或者最好是已经集成进 GSO 的产品。我们尝试过 CircleCI,Codeship 和 Shippable,

下面有一个简单的表格,展示了每个工具的一些细节:

我们最终选择了 Codeship,我认为我们的选择是正确的,

也感谢 Codeship 团队的支持。

接下来?

一旦部署了现代化的 CI/CD 流水线,您可能会意识到开发人员工作流程中的一些工具和流程也需要进行现代化改造。

测试是一个要着重关注的领域,如果您的部署频率是每天或者一天多次,您的每次测试可能需要数小时甚至一晚上才能完成。

mabl 正在使用机器学习解决这个问题。

Jenkins 官方微信公众号
Jenkins 官方微信公众号

本文系外文翻译,前往查看

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

本文系外文翻译,前往查看

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
什么是CI/CD,你了解它给团队带来的收益和挑战吗?
CI/CD 的出现改变了开发人员和测试人员发布软件的方式。本文是描述这一变化的系列文章第一篇, 这些文章将提供各种工具和流程的讲解,以帮助开发人员更好的使用 CI/CD。
灵雀云
2019/07/30
1.6K0
什么是CI/CD,你了解它给团队带来的收益和挑战吗?
什么是CI/CD
大家好,我是洋子。CI/CD这个词大家或多或少都听过,甚至在进行软件测试面试时经常会进行考察
Bug挖掘机
2022/09/28
5K0
什么是CI/CD
基于OpenStack和Docker设计的CI/CD
目前,在Docker容器中部署和运行OpenStack云计算服务,已成为主流趋势之一。基于这样的背景,设计和实现OpenStack+Docker环境下的CI/CD应用便成为了必然,其核心是在OpenStack IaaS云计算平台上创建虚拟机,实现基于OpenStack的产品的CI/CD服务。
Henry Zhang
2019/04/12
1.4K0
基于OpenStack和Docker设计的CI/CD
深入解析Jenkins中的CI与CD:区别与实践
在当今快速发展的软件开发领域,敏捷开发和DevOps理念愈发深入人心。Jenkins作为一款强大的开源自动化服务器,在持续集成(CI)和持续交付/部署(CD)中发挥着关键作用。理解Jenkins中CI和CD的区别,对于构建高效的软件开发流程、提升软件质量和交付速度至关重要。本文将深入探讨Jenkins中的CI与CD,帮助读者更好地把握二者的区别与实践要点。
Front_Yue
2025/02/14
991
深入解析Jenkins中的CI与CD:区别与实践
还不知道什么是CI/CD?看这篇就行了!
在CI/CD和DevOps领域中,持续交付和持续部署是一个老生常谈的话题。持续集成这个术语最早是在1994年由Grady Booch提出。微服务提出者Martin Flower在2014年发表的论文《Microservice》中也对软件开发持续集成提供了可参考原则。持续集成是借助工具对软件项目进行持续的自动化的编译打包构建测试发布,来检查软件交付质量的一种行为。而持续部署是基于持续交付的优势自动将经过测试的代码推入生产环境的过程。下文从细节描述了持续集成和持续部署各阶段的关键步骤,以下是原文。
用户5927304
2021/06/29
2.2K0
第1章 开篇-为什么要做CI/CD?
本章阐述持续集成系统的发展历程、持续集成系统的原理,以及持续集成系统的实现过程,目的是让大家全面了解持续集成系统,更加深入的学习持续集成系统的原理,为后续章节的学习做好准备。我会分享一些个人的经验。
DevOps云学堂
2020/07/23
2.4K0
如何实施有效的 CI/CD 流水线
DevOps 有效地弥合了开发、运营和IT服务团队之间的鸿沟,为了培养 DevOps 文化,使用正确的 DevOps 工具和实施正确的 DevOps 流程显得尤为重要。
DevOps时代
2020/05/08
8580
如何实施有效的 CI/CD 流水线
CI 不是 CD
持续集成/持续交付(CI/CD)。这组两个首字母缩写词组被广泛使用,以至于许多人对它们的含义并不完全了解。许多人忽略了各个部分的重要性、它们为何有所不同以及它们各自的优势如何相辅相成。
云云众生s
2024/03/28
1810
使用一条 CI/CD 流水线管理所有的产品
当我加入 WorkSafeBC 负责云端运维和工程流程优化的云端运维团队时,我和大家分享了我的梦想,那就是一个工具化的流水线,每一个产品都可以持续集成和持续交付。
用户1880875
2021/09/15
4520
GitLab CI/CD教程(一):为什么要学GitLab CI/CD?
回答这问之前我们首先来说一下什么是CI/CD 网上这部分的资料有很多,这部分只做简单介绍,重点是GitLab CI/CD的有点与缺点。 这里引用一下其他人的介绍
拿我格子衫来
2022/01/24
6950
GitLab CI/CD教程(一):为什么要学GitLab CI/CD?
【云原生】持续集成和部署(Jenkins)
CI的英文名称是Continuous Integration,中文翻译为:持续集成。
共饮一杯无
2022/11/28
1.1K1
【云原生】持续集成和部署(Jenkins)
DevOps研发模式下CI/CD实践详解指南
借着公司今年新组建的中台研发部东风,我作为其中的主要负责人,在研发中心主导推行DevOps研发管理模式转变及质量管理创新建设,本篇文章摘取自今年9月底,笔者在公司内部针对全体研发人员的一次DevOps培训PPT中的部分内容,涉及公司敏感信息和部分章节内容顺序已经作过处理。
测试开发技术
2019/12/09
1.3K0
DevOps研发模式下CI/CD实践详解指南
完整的 CI/CD 集合[教程]
什么是 CI/CD? 什么是 CI/CD?作者:Izzy Azeri-让我们看一下 CI 和 CD,这是所有 DevOps 商店的基本基石,并看看如何利用这些概念来帮助更好地交付下一个项目。 什么是持续集成和持续交付?作者:Arnab Roy—我们深入探讨了 DevOps 环境的两个基本要素。 什么是持续交付?好处和最佳实践,作者:ATC 团队-看看持续交付如何适合 DevOps 流水线,它与持续部署有何不同以及一些最佳实践。 持续集成与持续交付,作者:Rebecca Pruess—持续集成和交付是最常
LinuxSuRen
2020/02/14
2.4K0
完整的 CI/CD 集合[教程]
Agile, CI/CD,DevOps
随着DevOps理念的普及与扩散,可能会被一大堆名字概念搞的莫名其妙,理清它们之间的关系可以帮助团队知道DevOps如何落地,改善工作流程。
DevOps在路上
2023/05/16
2870
Agile, CI/CD,DevOps
从CI/CD持续集成部署到DevOps研发运维一体化
今天整理下从传统的CI/CD到DevOps研发运维一体化的整个演进过程。类似于每日构建和冒烟测试,实际上在10多年前就已经在实践,比如当前用的笔记多的Ant+CruiseControl方式来实现自动化的编译构建和持续集成能力。
IT大咖说
2021/01/27
1.7K0
从CI/CD持续集成部署到DevOps研发运维一体化
探索CI/CD:持续集成与持续部署的基本概念
在现代软件开发中,持续集成(CI)和持续部署(CD)已经成为提高开发效率和产品质量的关键实践。本文将详细介绍CI/CD的基本概念、优势以及如何在实际项目中实施CI/CD。
Echo_Wish
2024/10/10
6780
探索CI/CD:持续集成与持续部署的基本概念
DevOps & CI/CD Top 30+ 面试问题
希望这些问题和建议的答案能使你快速掌握DevOps和CI/CD的相关知识,帮助你在面试之前对DevOps和CI/CD有系统性的概念和理解。
Peter Shen
2020/06/12
5.7K0
DevOps & CI/CD Top 30+ 面试问题
Playwright系列:第11章 CI/CD集成(Jenkins/Gitlab)
CI/CD即持续集成/持续交付,是软件开发的一种自动化流程。借助CI/CD ,我们可以自动运行测试、代码质量检查、构建打包发布等步骤。结合Playwright可以实现自动化UI测试的CI/CD流水线。
苦叶子
2023/06/09
1.1K1
Playwright系列:第11章 CI/CD集成(Jenkins/Gitlab)
一篇文章搞清楚 CI, CD AND CD
CI, CD AND CD 当我们在谈论现代的软件编译和发布流程的时候,经常会听到CI 和CD这样的缩写短语。CI很容易理解,就是持续集成。但是CD既可以指代码持续交付,也可理解为代码持续部署。CI和CD之间有很多相似的部分,但是也有很大的区别。这里我们将给大家介绍它们之间的区别和联系。 持续集成(CONTINUOUS INTEGRATION) 在持续集成环境中,开发人员将会频繁的提交代码到主干。这些新提交在最终合并到主线之前,都需要通过编译和自动化测试流进行验证。这样做是基于之前 持续集成过程中很重视自动
DevOps时代
2018/02/02
1.7K0
一篇文章搞清楚 CI, CD AND CD
『Jenkins』使用Jenkins与Kubernetes实现CI/CD的详细指南
在现代软件开发过程中,持续集成(CI)和持续交付(CD)已经成为高效开发的重要组成部分。Jenkins作为最广泛使用的开源自动化工具,支持从源代码管理到构建、测试、部署等全过程的自动化管理。而Kubernetes作为现代云原生应用的容器编排平台,能够提供强大的资源管理和自动化部署能力。将Jenkins与Kubernetes结合使用,能够实现自动化构建、测试和部署,提升开发团队的效率并减少人为错误。
数字扫地僧
2024/12/24
1560
相关推荐
什么是CI/CD,你了解它给团队带来的收益和挑战吗?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文