CI/CD是什么

article/2025/9/22 10:40:55

文章目录

    • 前言
    • CI/CD概念
      • 持续集成(Continuous integration,CI)
      • 持续交付(Continuous Delivery,CD)
      • 持续部署(Continuous Deployment,CD)
      • CI/CD小结
    • CI/CD 工具
      • CI/CD 配置文件
    • 结尾语


前言

大家好,我是洋子。CI/CD这个词大家或多或少都听过,甚至在进行软件测试面试时经常会进行考察

那CI/CD到底是什么呢,有的同学认为CI/CD 就是 Jenkins集成,这其实是一种片面的理解,我们可以使用 Jenkins 来实现CI/CD,也可以借助其他工具来实现,如GitLab CI/CD,在互联网大厂基本也有自研的CI/CD工具

今天就带大家完整的介绍一下CI/CD的概念,以及CI/CD在大厂是如何进行落地的

CI/CD概念

CI/CD 是持续集成(Continuous Integration,CI)、持续交付(Continuous Delivery,CD)与持续部署(Continuous Deployment,CD)的简称,注意CD对应了两个名词

CI/CD是实现敏捷开发Devops理念的一种方法,具体而言,CI/CD 可让持续自动化和持续监控贯穿于应用的整个生命周期(从集成和测试,到交付和部署)。这些关联的事务通常被统称为CI/CD 管道(Pipeline),由开发(RD)、测试(QA)、运维(OP)团队以敏捷方式协同支持
请添加图片描述

持续集成(Continuous integration,CI)

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

通俗的来讲,持续集成就是在开发写完代码后,提交代码准入后自动触发的一系列流程,主要包括:

  • 代码编译
  • 代码打包
  • 单元测试
  • 代码静态扫描分析
  • UI、接口自动化测试

持续集成(CI)可以帮助开发人员更加频繁地(有时甚至每天)将代码更改合并到共享分支或"主干"(master分支)中,另外通过持续集成当中的单元测试、代码扫描、自动化测试我们可以尽早发现新提交的代码引入的问题,从而更加快速修复这些错误

请添加图片描述

持续交付(Continuous Delivery,CD)

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

在持续交付中,每个阶段(从代码更改的合并,到生产就绪型构建版本的交付)都涉及测试自动化和代码发布自动化。在流程结束时,运维团队可以快速、轻松地将应用部署到生产环境中。注意,持续交付在自动化测试和集成结束后,具备部署的能力,但不会自动部署,而是手动部署。如果有自动部署,则是持续部署的概念了
请添加图片描述

持续部署(Continuous Deployment,CD)

对于一个成熟的 CI/CD 管道来说,最后的阶段是持续部署。作为持续交付——自动将生产就绪型构建版本发布到代码存储库——的延伸,持续部署可以自动将应用发布到生产环境

由于在生产之前的管道阶段没有手动门控,因此持续部署在很大程度上都得依赖精心设计的自动化测试

实际上,持续部署意味着开发人员对应用的更改在编写后的几分钟内就能生效(假设它通过了自动化测试)。这更加便于持续接收和整合用户反馈。总而言之,所有这些 CI/CD 的关联步骤都有助于降低应用的部署风险,因此更便于以小件的方式(而非一次性)发布对应用的更改。不过,由于还需要编写自动化测试以适应 CI/CD 管道中的各种测试和发布阶段
请添加图片描述

CI/CD小结

  • 持续集成: 高频率的将代码合入主干,在合入之前触发单测和集成测试等去验证代码的改动,确保改动不会对应用造成破坏
  • 持续交付:将代码合入到代码仓库。其目标是拥有一个可随时部署到生产环境的代码库
  • 持续部署:在流程结束时,运维团队可以快速、轻松地将应用部署到生产环境中

CI/CD 工具

CI/CD 集成于 CI/CD 工具及代码托管服务。CI/CD 有时也可理解为进行 CI/CD 的构建服务器,而提供 CI/CD 的服务,如以下产品,将会提供构建服务与 GitHub/GitLab 集成在一起

  • Jenkins
  • GitLab CI/CD
  • Travis CI

若公司没有 CI/CD 基础设施,那么可以尝试 github 免费的 CICD 服务GitHub Actions

若公司以 GitLab CI 作为 CI/CD 工具,此时需要自建 GitLab Runner 作为构建服务器

在互联网大厂,一般是有自研的CI/CD 工具

CI/CD 配置文件

CI/CD 流水线(pipeline)的配置文件使用的便是 yaml 语法写的,因此需要先理解一下相关的语法。这里推荐通过阮一峰老师的文章学习https://www.ruanyifeng.com/blog/2016/07/yaml.html

以下为GitLab CI/CD 完整 pipeline 的配置文件gitlab-ci.yml,该配置中一共是三个阶段stage:build、test、deploy;这三个阶段合在一起描述了代码上库之后的需要进行的处理,分别是代码构建(编译)、测试、部署阶段

各阶段执行的顺序为,build(构建)=> test(测试)=> deploy(部署)

在每个阶段,我们可以设置对应的任务Job。以编译阶段为例,就用echo打印了下 “build project”这个字符串,然后执行了make -f Makefile命令进行编译

# .gitlab-ci.yml
stages:- build- test- deploybuild_job:stage: build # 指定job所属stageimage: centos:7 # 指定执行job的所使用docker镜像tags: - clf-centos-runner # 指定执行job的runner(即机器)script: # job执行时运行的脚本- echo "build project"- make -f Makefiletest_job:stage: testimage: centos:7tags: - clf-centos-runnerscript:- echo "test project"deploy_job:stage: deployimage: centos:7tags: - clf-centos-runnerscript:- echo "deploy project"

在实践过程中,可以根据需要创建三条pipeline,触发时机分别为

  • ChangePipeline :代码提交后,入库前自动触发
  • BranchPipeline:代码入库后,发布前自动触发
  • MasterPipeline:合入主干时自动触发

开发在合入代码后,首先触发的是ChangePipeline,我们可以在这流水线进行代码静态扫描、单元测试,只有这条流水线触发后才能进行合入代码库分支
在这里插入图片描述
在代码合入分支后,触发BranchPipeline这条流水线上适合进行接口或者UI自动化测试(对应下图核心功能准入测试),因为往往接口和UI自动化测试相对耗时,开发某个需求往往有多次提交,没有必要在每次提交代码后进行。这条流水线还可以进行测试环境沙盒部署,提测,功能回归等
在这里插入图片描述
MasterPipeline是在进行合入主干的时候触发,一般进行准出测试,上线,线上冒烟测试等等
在这里插入图片描述
根据业务需求不同,也可以在BranchPipeline 针对某个分支修改进行上线,不必在合入master时才进行上线

结尾语

「持续集成(Continuous Integration)」、「持续交付(Continuous Delivery)」和「持续部署(Continuous Deployment)」提供了一个优秀的 DevOps 环境,对于整个团队来讲,好处与挑战并行。不管如何,频繁部署、快速交付以及开发测试流程自动化都将成为将来软件工程的重要组成部分

如果你觉得,这篇文章都对你有帮助的话,麻烦点一个【赞】和【在看】


http://chatgpt.dhexx.cn/article/bEX0Ht0f.shtml

相关文章

CICD简介

简介 CICD 是 持续集成(Continuous Integration)持续交付和持续部署(Continuous Deployment)简称。指在开发过程中自动执行一系列从开发到部署的过程中,尽量减少人工的介入。 CI 持续集成 ​ 定义:频繁…

都在说CI/CD,到底什么是CI/CD

引入 这篇文章是自己工作多年对CI/CD的理解,纯属个人见解。 不想说太多概念性的东西,直接从技术人员实际能接触的过程来展开说说。另外我这篇只是想关注一些通用的流程,细节的不同这里不纠结。比如微服务的CI/CD和单体服务有些不同&#xf…

自动化运维CICD

目录 概述 为什么持续集成和发布可以提高效率 如何实现 1、在linux服务器安装部署代码仓库 2、安装jenkins 使用shell脚本实现CICD 使用pipeline实现CICD 使用Blue Ocean实现CICD 概述 持续集成(Continuous Integration,CI)和持续发布&#xff0…

什么是 CI/CD ?

说在开头 CI、CD 其实是三个概念,包含了一个 CI 和两个 CD,CI全称 Continuous Integration,表示持续集成,CD包含 Continuous Delivery和 Continuous Deployment,分别是持续交付和持续部署。这三个概念之间是有前后依赖…

【神经网络】一文读懂LSTM神经网络

简介 说到LSTM神经网络,大家都不陌生,LSTM指的是Long Short-Term Memory,意思是:长短时记忆,也就是说这个神经网络有记忆功能,为什么说它有记忆功能呢?因为在训练数据的时候,很久之前…

深度学习中的循环神经网络LSTM详解

(一)、什么是循环神经网络LSTM? LSTM指的是长短期记忆网络(Long Short Term Memory),它是循环神经网络中最知名和成功的扩展。由于循环神经网络有梯度消失和梯度爆炸的问题,学习能力有限,在实际任务中的效果…

【神经网络】学习笔记三—LSTM简介篇

1. RNN和LSTM结构对比 RNN: 循环神经网络(Recurrent Neural Network,RNN)是一种用于处理序列数据的神经网络。相比一般的神经网络来说,他能够处理序列变化的数据。比如某个单词的意思会因为上文提到的内容不同而有不…

深度学习-LSTM网络-代码-示例

一、 LSTM网络原理 要点介绍 (1)LSTM网络用来处理带“序列”(sequence)性质的数据,比如时间序列的数据,像每天的股价走势情况,机械振动信号的时域波形,以及类似于自然语言这种本身带有顺序性质的由有序单…

LSTM模型介绍

递归神经网络(RNN) 人类不会每时每刻都开始思考。 当你阅读这篇文章时,你会根据你对之前单词的理解来理解每个单词。 你不会忘掉掉所有东西,然后再从头开始思考。 你的想法有持久性。 传统的神经网络不能做到这一点,…

人人都能用Python写出LSTM-RNN的代码![你的神经网络学习最佳起步]

0. 前言 本文翻译自博客: iamtrask.github.io ,这次翻译已经获得trask本人的同意与支持,在此特别感谢trask。本文属于作者一边学习一边翻译的作品,所以在用词、理论方面难免会出现很多错误,假如您发现错误或者不合适…

LSTM神经网络算法

RNN RNN 是包含循环的网络,允许信息的持久化。 在下面的示例图中,神经网络的模块,A,正在读取某个输入 x_i,并输出一个值 h_i。循环可以使得信息可以从当前步传递到下一步。 RNN 可以被看做是同一神经网络的多次复制&…

Understanding LSTM Networks(LSTM的网络结构)

Recurrent Neural Networks 人类不是每时每刻都从头开始思考的。当你读这篇文章的时候,你理解每个单词是基于你对以前单词的理解。你不会把所有的东西都扔掉,然后从头开始思考。你的思想有毅力。传统的神经网络无法做到这一点,这似乎是一个主…

理解 LSTM 网络

递归神经网络人类并不是每时每刻都从头开始思考。正如你阅读这篇文章的时候,你是在理解前面词语的基础上来理解每个词。你不会丢弃所有已知的信息而从头开始思考。你的思想具有持续性。传统的神经网络不能做到这点,而且这似乎也是它的主要缺陷。比如&…

LSTM网络的简单理解

目录 RNN递归神经网络LSTM神经网络结构变形1.peephole connections结构2.在忘记门与输入门之间引入一个耦合3.门循环单元(GRU) 今天对LSTM网络进行学习。 在理解LSTM网络之前,我们首先要对Recurrent Neural Networks(RNNs&#xf…

循环神经网络与LSTM

1. 循环神经网络 ①基本结构 在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如,你要预测句子的下一个单词是什么&am…

实例 :教你使用简单神经网络和LSTM进行时间序列预测(附代码)

翻译:张玲 校对:丁楠雅 本文约1500字,建议阅读5分钟。 作者基于波动性标准普尔500数据集和Keras深度学习网络框架,利用python代码演示RNN和LSTM RNN的构建过程,便于你快速搭建时间序列的预测模型。 图片来源&#xff…

【LSTM】深入浅出讲解长短时记忆神经网络(结构、原理)

本文收录于《深入浅出讲解自然语言处理》专栏,此专栏聚焦于自然语言处理领域的各大经典算法,将持续更新,欢迎大家订阅!​​个人主页:有梦想的程序星空​​个人介绍:小编是人工智能领域硕士,全栈…

深入理解LSTM神经网络

本文内容及图片主要参考:Understanding LSTM Networks LSTM核心思想 LSTM最早由 Hochreiter & Schmidhuber 在1997年提出,设计初衷是希望能够解决神经网络中的长期依赖问题,让记住长期信息成为神经网络的默认行为,而不是需要…

LSTM神经网络实战

上一遍博客简单的介绍了LSTM神经网络的工作原理, 有兴趣的打开了解一下: https://blog.csdn.net/weixin_52486467/article/details/126301845 显目介绍: 一、问题背景 电力系统负荷(电力需求量,即有功功率&#xf…

LSTM -长短期记忆网络(RNN循环神经网络)

文章目录 基本概念及其公式输入门、输出门、遗忘门候选记忆元记忆元隐状态 从零开始实现 LSTM初始化模型参数定义模型训练和预测 简洁实现小结 基本概念及其公式 LSTM,即(long short-term Memory)长短期记忆网络,也是RNN循环神经网络的一种改进方法&…