什么是ci/cd

一纸荒唐 一纸荒唐     2022-11-30     312

关键词:

CI/CD 的出现改变了开发人员和测试人员发布软件的方式。从最初的瀑布模型, 到后来的敏捷开发(Agile Development ), 再到今天的 DevOps,这是现代开发人员构建出色产品的技术路线。 随着 DevOps 的兴起,出现了持续集成,持续交付(CI/CD)和持续部署的新方法, 而传统的软件开发和交付方式在迅速变得过时。过去的敏捷时代里, 大多数公司的软件发布周期是每月、每季度甚至每年;而在现在 DevOps 时代,每周、每天甚至每天多次都是常态。 当 SaaS 成为业界主流后尤其如此,您可以轻松地动态更新应用程序, 而无需强迫用户下载更新组件。很多时候,用户甚至都不会注意到正在发生变化。

开发团队通过软件交付流水线(Pipeline)实现自动化,以缩短交付周期, 大多数团队都有自动化流程来检查代码并部署到新环境。 我们一直在关注自动化测试流程,但这将在之后的文章中介绍。 今天,我们将介绍什么是 CI/CD ,以及现代软件公司如何使用工具将部署代码的流程自动化。

img

下面我们一起来看看到底什么是DevOps、CI/CD、Agile Development以及他们之间的关系和区别。

1、DevOps

DevOps是Development和Operations的组合,是一种方法论,是一组过程、方法与系统的统称,用于促进应用开发、应用运维和质量保障(QA)部门之间的沟通、协作与整合。以期打破传统开发和运营之间的壁垒和鸿沟。

img

DevOps是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。通过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。具体来说,就是在软件交付和部署过程中提高沟通与协作的效率,旨在更快、更可靠的的发布更高质量的产品。

也就是说DevOps是一组过程和方法的统称,并不指代某一特定的软件工具或软件工具组合。各种工具软件或软件组合可以实现DevOps的概念方法。其本质是一整套的方法论,而不是指某种或某些工具集合,与软件开发中设计到的OOP、AOP、IOC(或DI)等类似,是一种理论或过程或方法的抽象或代称。

在了解了什么是DevOps之后、我们来看看到底什么是CI/CD?CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。CI/CD 的核心概念是持续集成、持续交付和持续部署。作为一个面向开发和运营团队的解决方案,CI/CD 主要针对在集成新代码时所引发的问题(亦称:“集成地狱”)。

具体而言,CI/CD 可让持续自动化和持续监控贯穿于应用的整个生命周期(从集成和测试阶段,到交付和部署)。这些关联的事务通常被统称为“CI/CD 管道”,由开发和运维团队以敏捷方式协同支持。现在我们把CI/CD拆分开、我们先来看看什么是CI?

2、Continuous Integration

CI的英文名称是Continuous Integration,中文翻译为:持续集成。

img

CI中,开发人员将会频繁地向主干提交代码,这些新提交的代码在最终合并到主干前,需要经过编译和自动化测试流进行验证。 持续集成(CI)是在源代码变更后自动检测、拉取、构建和(在大多数情况下)进行单元测试的过程。持续集成的目标是快速确保开发人员新提交的变更是好的,并且适合在代码库中进一步使用。CI的流程执行和理论实践让我们可以确定新代码和原有代码能否正确地集成在一起。

通俗点讲就是:通过持续集成, 开发人员能够在任何时候多次向仓库提交作品,而不是独立地开发每个功能模块并在开发周期结束时一一提交。这里的一个重要思想就是让开发人员更快更、频繁地做到这一点,从而降低集成的开销。 实际情况中,开发人员在集成时经常会发现新代码和已有代码存在冲突。 如果集成较早并更加频繁,那么冲突将更容易解决且执行成本更低。当然,这里也有一些权衡,这个流程不提供额外的质量保障。 事实上,许多组织发现这样的集成方式开销更大,因为它们依赖人工确保新代码不会引起新的 bug 或者破坏现有代码。 为了减少集成期间的摩擦,持续集成依赖于测试套件和自动化测试。 然而,要认识到自动化测试和持续测试是完全不同的这一点很重要。

CI 的目标是将集成简化成一个简单、易于重复的日常开发任务, 这样有助于降低总体的构建成本并在开发周期的早期发现缺陷。 要想有效地使用 CI 必须转变开发团队的习惯,要鼓励频繁迭代构建, 并且在发现 bug 的早期积极解决。

3、CD

这里的CD可对应多个英文名称,持续交付Continuous Delivery和持续部署Continuous Deployment。下面我们分别来看看上面是持续交付和持续部署。

3.1、持续交付(CD)

持续交付(CD)实际上是 CI 的扩展,其中软件交付流程进一步自动化,以便随时轻松地部署到生成环境中。 成熟的持续交付方案也展示了一个始终可部署的代码库。使用 CD 后,软件发布将成为一个没有任何紧张感的例行事件。 开发团队可以在日常开发的任何时间进行产品级的发布,而不需要详细的发布方案或者特殊的后期测试。

完成 CI 中构建及单元测试和集成测试的自动化流程后,持续交付可自动将已验证的代码发布到存储库。为了实现高效的持续交付流程,务必要确保 CI 已内置于开发管道。持续交付的目标是拥有一个可随时部署到生产环境的代码库。

img

在持续交付中,每个阶段(从代码更改的合并,到生产就绪型构建版本的交付)都涉及测试自动化和代码发布自动化。在流程结束时,运维团队可以快速、轻松地将应用部署到生产环境中或发布给最终使用的用户。

CD 集中依赖于部署流水线,团队通过流水线自动化测试和部署过程。此流水线是一个自动化系统, 可以针对构建执行一组渐进的测试套件。CD 具有高度的自动化,并且在一些云计算环境中也易于配置。在流水线的每个阶段,如果构建无法通过关键测试会向团队发出警报。否则,将继续进入下一个测试, 并在连续通过测试后自动进入下一个阶段。流水线的最后一个部分会将构建部署到和生产环境等效的环境中。 这是一个整体的过程,因为构建、部署和环境都是一起执行和测试的,它能让构建在实际的生产环境可部署和可验证。

3.2、持续部署(CD)

持续部署扩展了持续交付,以便软件构建在通过所有测试时自动部署。在这样的流程中, 不需要人为决定何时及如何投入生产环境。CI/CD 系统的最后一步将在构建后的组件/包退出流水线时自动部署。 此类自动部署可以配置为快速向客户分发组件、功能模块或修复补丁,并准确说明当前提供的内容。采用持续部署的组织可以将新功能快速传递给用户,得到用户对于新版本的快速反馈,并且可以迅速处理任何明显的缺陷。 用户对无用或者误解需求的功能的快速反馈有助于团队规划投入,避免将精力集中于不容易产生回报的地方。

随着 DevOps 的发展,新的用来实现 CI/CD 流水线的自动化工具也在不断涌现。这些工具通常能与各种开发工具配合, 包括像 GitHub 这样的代码仓库和 Jira 这样的 bug 跟踪工具。此外,随着 SaaS 这种交付方式变得更受欢迎, 许多工具都可以在现代开发人员运行应用程序的云环境中运行,例如 GCP 和 AWS。但是对于一个成熟的CI/CD管道(Pipeline)来说,最后的阶段是持续部署。作为持续交付——自动将生产就绪型构建版本发布到代码存储库——的延伸,持续部署可以自动将应用发布到生产环境。目前最受欢迎的自动化工具是 Jenkins,后面我们也将详细介绍关于 Jenkins 的相关内容。

img

持续部署意味着所有的变更都会被自动部署到生产环境中。持续交付意味着所有的变更都可以被部署到生产环境中,但是出于业务考虑,可以选择不部署。如果要实施持续部署,必须先实施持续交付。持续交付并不是指软件每一个改动都要尽快部署到产品环境中,它指的是任何的代码修改都可以在任何时候实施部署。持续交付表示的是一种能力,而持续部署表示的则一种方式;持续部署是持续交付的最高阶段。

4、Agile Development

最后我们再来看看上面是敏捷开发,这个称呼似乎还没有所谓的简称,而且这个称呼似乎在国内被滥用了。敏捷开发着重于一种开发的思路,拥抱变化和快速迭代。如何实现敏捷开发,目前似乎尚没有完善的工具链,更多的是一种概念性,调侃的说法“既想马尔跑得快,又想马儿不吃草”的另外一种说法。

img

上图揭示了敏捷开发的一些内涵和目标,似乎有点儿一本真经的胡说八道的意思。对于上面概念性的内容每个人的理解都有所不同。就好比CGI 这个词,即可以理解成CGI这种协议,也可以理解成实现了CGI协议的软件工具,都没有问题,咬文嚼字过犹不及。最后我们通过下面的图来看看前面讲到的CI、CD和DevOps之间的关系 :

img

运维面试devops&&ci/cd常见面试题

文章目录1.什么是DevOps2.什么是持续集成3.什么是持续交付4.什么是持续部署5.什么是持续测试及其好处6.什么是版本控制及其用途?7.什么是Git?8.解释DevOps对开发人员有何帮助?9.CI/CD有什么好处?10.持续交付有什么好处?11.持续... 查看详情

什么是ci/cd?

...续交付&持续部署持续集成(ContinuousIntegration)什么是持续集成?定义:持续频繁的(每天多次)将本地代码“集成”到主干分支,并保证主干分支可用持续集成这个词,起源于极限编程,是... 查看详情

什么是ci/cd?(翻译)(代码片段)

 CI/CD是什么?原文:https://opensource.com/article/18/8/what-cicd在谈论软件开发时,经常会提到持续集成ContinuousIntegration(CI)和持续交付ContinuousDelivery(CD)这几个术语。但它们真正的意思是什么呢?在本文中,我将解释这些和相关... 查看详情

docker和ci/cd实战

...程方面又提出了敏捷开发、DevOps,又把CI/CD炒火了。那么什么是DevOps?DevOps和CI/CD有又什么关系呢?以下内容摘自https://en.wikipedia.org/wiki/DevOpsDevOps(aclippedcompoundof"development"and"operations")isasoftwaredevelopmentmethodologythatcombinessoftwaredevelopme... 查看详情

你知道什么是ci/cd吗?不懂?五分钟让你彻底理解!

在CI/CD和DevOps领域中,持续交付和持续部署是一个老生常谈的话题。持续集成这个术语最早是在1994年由GradyBooch提出。微服务提出者MartinFlower在2014年发表的论文《Microservice》中也对软件开发持续集成提供了可参考原则。持续集成... 查看详情

新jenkins实践-第1章开篇-为什么要做ci/cd?

...没有亲身体验过传统的应用发布,你可能不会觉得CI/CD有什么吸引人的地方。一般一个开发团队中都会存在多个角色:开发、测试、运维。当时我们的应用发布模式可以能是这样的:开发同 查看详情

Gitlab CI/CD 中设置 Python 虚拟环境的最佳实践是啥

...nvirtualenvironmentGitlabCI/CD中设置Python虚拟环境的最佳实践是什么【发布时间】:2021-10-2616:07:01【问题描述】:问题现在我正在为一个托管在Gitlab上的Python项目写一个.gitlab-ci.yml。我真的不 查看详情

用于 Maven 部署的 Gitlab CI/CD 的适当阶段是啥?

...itlabCI/CDforamavendeploy?用于Maven部署的GitlabCI/CD的适当阶段是什么?【发布时间】:2021-07-3107:12:44【问题描述】:我正在将GitlabCI/CD用于Java/Maven项目,并且对显示多个阶段的许多示例感到困惑,其中每个阶段都调用特定的Maven阶段( 查看详情

ci/cd技术分享:openstackzuul介绍

...单介绍下Zuul,包括Zuul的CI简单流程图、组件及架构等。什么是Zuul随着OpenStack持续集成的推广,基于OpenStack开源项目的 查看详情

GitLab CI/CD 脚本改进

...个Angular或React的构建过程。有没有人看到改进的空间?有什么明显的新手错误吗?exit命令是必要的还是脚本终止时会自动注销?另外,是否需要在每个部署部分的末尾删除部署密钥?-bui 查看详情

一文读懂ci/cd工具

...付(CD)的资源和信息有很多,但是你了解为什么我们需要CI和CD吗?以下为译文:关于持续集成(CI)和持续交付(CD)的资源和信息有很多,包括定义、最佳实践和操作指南。此外,每... 查看详情

jenkins与docker的自动化ci/cd流水线实战(代码片段)

...动化CI/CD流水线实战标签(空格分隔):docker的部分一:什么是CI/CD二:发布流程设计三:部署Git仓库并上传测试代码一:什么是CI/CD持续集成(ContinuousIntegration,CI):代码合并、构建、部署、测试都在一起,不断地执行这个过... 查看详情

AWS Lambda - 在 CI/CD 管道中版本控制和提升 lambda 的最佳实践是啥

...ineAWSLambda-在CI/CD管道中版本控制和提升lambda的最佳实践是什么【发布时间】:2021-01-1501:54:54【问题描述】:我是AWSLambdas的新手,想了解对lambd 查看详情

ci/cd持续集成小结

一、概念什么是devops,基于Gitlab从零开始搭建自己的持续集成流水线(Pipeline)https://blog.csdn.net/chengzi_comm/article/details/78778284 在编程中create、develop、build的意思https://cloud.tencent.com/developer/news/253675 当谈到GitL 查看详情

gitlabci/cd配置-并发送消息到飞书

参考技术A维基百科:CI/CD其他资料:什么是CI/CD?一文带你理解CI持续集成和CD持续交付/部署-红帽在软件工程中,CI/CD或CICD通常指的是持续集成和持续交付或持续部署的组合实践。CI/CD通过在应用程序的构建、测试和部署中实施... 查看详情

GitLab CI/CD:这项工作没有痕迹。 & 没有工作日志

...题描述】:我是GitLabCI/CD的新手,我想知道我的管道在做什么。语法是正确的,但工作一直失败,但我不知道为什么并想检查跟踪。查看作业跟踪时,它显示“此作业没有跟踪”。如果我查看作业日志,也会发生同样的 查看详情

Gitlab CI/CD 自动标记发布

...变量中,然后将此变量与git一起使用来标记分支。我在做什么这是我的.gitlab-ci.ym 查看详情

aws CI/CD 工作流程的最佳路径是啥? Cloudformation、SAM 还是无服务器框架?

...udformation,SAMorServerlessframework?awsCI/CD工作流程的最佳路径是什么?Cloudformation、SAM还是无服务器框架?【发布时间】:2020-02-2503:47:59【问题描述】:需 查看详情