当前位置: 首页 > news >正文

CI/CD是什么?

CI/CD 定义

CI/CD 代表持续集成和持续部署(或持续交付)。它是一套实践和工具,旨在通过自动化构建、测试和部署来改进软件开发流程,使您能够更快、更可靠地交付代码更改。

  • 持续集成 (CI):在共享存储库中自动构建、测试和集成代码更改

  • 持续交付 (CD):自动将代码变更交付至生产环境以供批准

  • 持续部署(CD):自动将代码更改直接部署给客户

自动化是实现 DevOps 成功的核心原则,而 CI/CD 是关键组成部分。CI/CD 包括持续集成和持续交付或持续部署。它们合在一起形成了一个“CI/CD 管道”——一系列自动化工作流程,可帮助 DevOps 团队减少手动任务。

CI/CD 管道

流程图显示 CI/CD 中的步骤,包括规划、编码、构建、测试、创建工件、登台和生产。

持续交付与持续部署

当有人说 CI/CD 时,他们所指的“CD”通常是持续交付,而不是持续部署。两者有什么区别?在使用持续交付的 CI/CD 管道中,当开发人员将产品推送到生产环境时,自动化会暂停。人员(您的运营、安全或合规团队)仍需要在最终发布之前手动签名,这会增加更多延迟。另一方面,持续部署可自动化整个发布过程。代码更改在通过所有必需的测试后立即部署给客户。

持续部署是DevOps 自动化
的终极示例。但这并不意味着它是实施 CI/CD 的唯一方法或“正确”方法。由于持续部署依赖于严格的测试工具和成熟的测试文化,因此大多数软件团队都从持续交付开始,并随着时间的推移集成更多自动化测试。

为什么选择 CI/CD?

简短的回答是:速度。《DevOps 现状》报告
发现,已“掌握”CI/CD 的组织部署频率比其他组织高 208 倍,交付周期比其他组织快 106 倍。虽然更快的开发速度是 CI/CD 最广为人知的好处,但持续集成和持续交付管道可以实现更多好处。

  • 开发速度:持续的反馈允许开发人员更频繁地提交较小的更改,而不是等待一次发布。

  • 稳定性和可靠性:自动化、持续的测试确保代码库保持稳定并随时可以发布。

  • 业务增长:从手动任务中解放出来后,组织可以将资源集中在创新、客户满意度和偿还技术债务上。

构建你的 CI/CD 工具包

团队通过结合自动化流程、步骤和工具,将 CI/CD 作为其开发工作流程的一部分。

  • 版本控制:CI 始于共享存储库,团队使用 Git 等版本控制系统 (VCS) 协作编写代码。VCS 可跟踪代码更改、简化恢复,并支持以代码形式配置来管理测试和基础架构。

  • 构建:CI 构建工具会自动将文件和组件打包成发布工件,并针对质量、性能和其他要求运行测试。完成必要的检查后,CD 工具会将构建发送给运营团队进行进一步测试和准备。

  • 审查和批准:将代码审查视为最佳实践可提高代码质量、鼓励协作,甚至帮助最有经验的开发人员做出更好的承诺。在 CI/CD 工作流程中,团队审查和批准代码或利用集成开发环境进行结对编程。

  • 环境:CI/CD 在环境中测试和部署代码,从开发人员构建代码的地方到运营团队公开发布应用程序的地方。环境通常有自己的特定变量和保护规则,以满足安全性和合规性要求。

CI/CD 工作流程示例

CI/CD 不一定很复杂,也不一定意味着在当前工作流程之上添加大量工具。

mabl
,开发人员每周仅使用两个 CI/CD 集成部署到生产环境约 80 次:mabl 测试套件和 GitHub Actions。以下是它的工作原理。

CI/CD 流程图展示了 mabl 如何部署到生产环境

  1. 开发人员打开拉取请求以触发初始构建和单元测试

  2. 已批准的提交将部署到预览环境

  3. 定制的 GitHub Actions 安装 mabl CLI 并运行无头测试

  4. GitHub Apps 在拉取请求中提供实时检查结果

  5. 已批准的提交将合并到主分支以进行其他测试或部署到生产中

什么使 CI/CD 成功

您会发现,无论在哪里,都有不同的工具和集成,但有效的 CI/CD 工作流程都具有相同的成功标志。

  • 自动化:CI/CD可以手动完成,但这不是目标。良好的 CI/CD 工作流程
    可自动完成构建、测试和部署,因此您有更多的时间编写代码,而不是执行更多任务。

  • 透明度:如果构建失败,开发人员需要能够快速评估出了什么问题以及原因。日志、可视化工作流构建器和深度集成的工具使开发人员能够更轻松地排除故障、了解复杂的工作流并与更大的团队分享他们的状态。

  • 速度:CI/CD 会影响您的整体 DevOps 性能,尤其是速度。DevOps 专家使用两个DORA 指标
    来衡量速度:变更前置时间(生产中代码提交的速度)和部署频率(提交代码的频率)。

  • 弹性:当与测试覆盖率、可观察性工具和功能标记等其他方法一起使用时,CI/CD 可以使软件更能抵抗错误。DORA 通过跟踪平均解决时间(事件解决的速度)和变更失败率(软件回滚的次数)来衡量这种稳定性。

  • 安全性:自动化包括安全性
    。随着 DevSecOps 的普及,面向未来的 CI/CD 管道可以检查代码和权限,并为审计失败、安全漏洞、不合规事件提供虚拟纸质记录。

  • 可扩展性:CI/CD 不仅涉及自动化,还涉及确保可扩展性。强大的 CI/CD 设置应能够随着开发团队和项目复杂性的增加而轻松扩展。这意味着它可以随着软件开发工作量的增加而有效地处理增加的工作量,从而保持生产力和效率。

相关文章:

CI/CD是什么?

CI/CD 定义 CI/CD 代表持续集成和持续部署(或持续交付)。它是一套实践和工具,旨在通过自动化构建、测试和部署来改进软件开发流程,使您能够更快、更可靠地交付代码更改。 持续集成 (CI):在共享存储库中自动构建、测试…...

[Java]合理封装第三方工具包(附视频)

-1.视频链接 视频版: 视频版会对本文章内容进行详细解释 [Java]合理封装第三方工具包_哔哩哔哩_bilibili 0.核心思想 对第三方工具方法进行封装,使其本地化,降低记忆和使用成本 1.背景 在我们的项目中,通常会引用一些第三方工具包,或者是使用jdk自带的一些工具类 例如: c…...

常规配置、整合IDEA

目录 Redis常规配置 tcp-keepalive security Jedis RedisTemplate 连接池技术 Lua脚本 Jedis集群 Redis应用问题&解决方案 缓存穿透 缓存击穿 缓存雪崩 分布式锁 Redis实现分布式锁 Redis新功能 ACL Redis常规配置 tcp-keepalive security redis.conf中…...

用Python写炸金花游戏

文章目录 **代码分解与讲解**1. **扑克牌的生成与洗牌**2. **给玩家发牌**3. **打印玩家的手牌**4. **定义牌的优先级**5. **判断牌型**6. **确定牌型优先级**7. **比较两手牌的大小**8. **计算每个玩家的牌型并找出赢家**9. **打印结果** 完整代码 以下游戏规则: 那…...

计算机的错误计算(一百九十二)

摘要 用两个大模型计算 csc(0.999), 其中,0.999是以弧度为单位的角度,结果保留5位有效数字。两个大模型均给出了 Python代码与答案。但是,答案是错误的。 例1. 计算 csc(0.999), 其中,0.999是以弧度为单位的角度,结…...

37 Opencv SIFT 特征检测

文章目录 Ptr<SIFT> SIFT::create示例 Ptr SIFT::create Ptr<SIFT> SIFT::create(int nfeatures 0,int nOctaveLayers 3,double contrastThreshold 0.04,double edgeThreshold 10,double sigma 1.6 );参数说明&#xff1a;nfeatures&#xff1a;类型&#x…...

Nginx界的天花板-Oracle 中间件OHS 11g服务器环境搭建

环境信息 服务器基本信息 如下表&#xff0c;本次安装总共使用2台服务器&#xff0c;具体信息如下&#xff1a; 服务器IP DNS F5配置 OHS1 172.xx.xx.xx ohs01.xxxxxx.com ohs.xxxxxx.com OHS2 172.xx.xx.xx ohs02.xxxxxx.com 服务器用户角色信息均为&#xff1a;…...

域名解析协议

一、DNS简述 ‌DNS协议是一种应用层协议&#xff0c;用于将域名转换为对应的IP地址‌&#xff0c;使得客户端可以通过域名来访问Internet上的各种资源‌ DNS的基础设施是由分层的DNS服务器实现的分布式数据库&#xff0c;它运行在UDP之上‌&#xff0c;通常使用端口号53‌ DN…...

微信小程序给外面的view设置display:flex;后为什么无法给里面的view设置宽度

如果父盒子view设置了display:flex&#xff0c;子view设置宽度值无效&#xff0c;宽度值都是随着内容多少而改变&#xff1a; 问题视图&#xff1a; 原因&#xff1a; flex布局元素的子元素&#xff0c;自动获得了flex-shrink的属性 解决方法&#xff1a; 给子view增加:fl…...

Maven怎么会出现一个dependency-reduced-pom.xml的文件

问题 今天打包时突然发现&#xff0c;多出了一个名为dependency-reduced-pom.xml的文件 解决方法 由于使用了maven-shade-plugin插件导致的&#xff0c;在 <plugin> 标签下添加 <configuration><createDependencyReducedPom>false</createDependencyR…...

突发!!!GitLab停止为中国大陆、港澳地区提供服务,60天内需迁移账号否则将被删除

GitLab停止为中国大陆、香港和澳门地区提供服务&#xff0c;要求用户在60天内迁移账号&#xff0c;否则将被删除。这一事件即将引起广泛的关注和讨论。以下是对该事件的扩展信息&#xff1a; 1. 背景介绍&#xff1a;GitLab是一家全球知名的软件开发平台&#xff0c;提供代码托…...

自学记录HarmonyOS Next DRM API 13:构建安全的数字内容保护系统

在完成了HarmonyOS Camera API的开发之后&#xff0c;我开始关注更复杂的系统级功能。在浏览HarmonyOS Next文档时&#xff0c;我发现了一个非常有趣的领域&#xff1a;数字版权管理&#xff08;DRM&#xff09;。最新的DRM API 13提供了强大的工具&#xff0c;用于保护数字内容…...

Vue 3 + Element Plus 实现文件上传组件:详细解析与实现指南

Vue 3 文件上传组件实现详解 在实际的前端开发中&#xff0c;文件上传是一个常见的需求&#xff0c;尤其是在需要处理文档、图片或其他类型文件的应用中。Vue 3 结合 Element Plus UI 组件库为我们提供了一个简单且灵活的文件上传解决方案。在这篇文章中&#xff0c;我们将详细…...

qt5.12.11+msvc编译器编译qoci驱动

1.之前编译过minGW编译器编译qoci驱动,很顺利就完成了,文章地址:minGW编译qoci驱动详解,今天按照之前的步骤使用msvc编译器进行编译,直接就报错了: 查了些资料,发现两个编译器在编译时,pro文件中引用的库不一样,下面是msvc编译器引用的库,其中编译引用的库我这里安装…...

Ubuntu 20.04 安装 LNMP

1. 更新系统 sudo apt update sudo apt upgrade2. 安装 Nginx sudo apt install nginx3. 安装 MariaDB (作为 MySQL 的替代) sudo apt install mariadb-server mariadb-client初始化 MariaDB 数据库&#xff08;可选&#xff09; sudo mysql_secure_installation4. 安装 PH…...

Llama 3 简介(一)

目录 1. 引言 1.1 Llama 3 的简介 1.2 性能评估 1.3 开源计划 1.4 多模态扩展 ps 1. 缩放法则 2. 超额训练&#xff08;Over-training&#xff09; 3. 计算训练预算 4. 如何逐步估算和确定最优模型&#xff1f; 2. 概述 2.1 Llama 3 语言模型开发两个主要阶段 2.2…...

在 CentOS 上安装 FFmpeg

在CentOS 上安装 FFmpeg 方法一&#xff1a;在线安装 添加 EPEL 和 RPM Fusion 源&#xff1a; sudo yum install epel-release sudo yum install https://download1.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm安装 FFmpeg&#xff1a; sudo yu…...

Python------Pandas的数据结构

Pandas主要处理以下三个数据结构&#xff1a; 序列(Series) 数据帧(DataFrame) 面板(Panel) 数据结构维数描述序列11维结构&#xff0c;值可变&#xff0c;大小不变数据帧22维结构&#xff0c;值可变&#xff0c;大小可变&#xff0c;表结构面板3维标记&#xff0c;值可变…...

矩阵碰一碰发视频源码技术解析,支持OEM

一、引言 随着近场通信技术的不断发展&#xff0c;矩阵碰一碰发视频技术作为一种创新的交互方式&#xff0c;逐渐在各个领域崭露头角&#xff0c;如智能营销、展览展示、教育科普等场景中都有着广泛的应用前景。通过将多个碰一碰设备或感应区域组成矩阵形式&#xff0c;用户能够…...

【汇编语言】外中断(一)—— 外中断的魔法:PC机键盘如何触发计算机响应

文章目录 前言1. 背景介绍2. 接口芯片和端口3. 外中断信息3.1 什么是外中断信息3.2 外中断源的分类3.2.1 可屏蔽中断3.2.1.1 什么是可屏蔽中断&#xff1f;3.2.1.2 可屏蔽中断的处理过程 3.2.2 不可屏蔽中断3.2.2.1 什么是不可屏蔽中断&#xff1f;3.2.2.2 不可屏蔽中断的处理过…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...