持续集成和持续交付

引言

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

具体而言,CI/CD 可让持续自动化和持续监控贯穿于应用的整个生命周期(从集成和测试阶段,到交付和部署)。这些关联的事务通常被统称为“CI/CD 管道”,由开发和运维团队以敏捷方式协同支持,采用的方法不是 DevOps 就是站点可靠性工程(SRE)。

一、CI/CD简介:

1. 持续集成(CI)

CI是指在代码仓库中的每次提交都自动触发构建和测试流程,确保新代码与现有代码的集成不会破坏应用的稳定性。现代应用开发的目标是让多位开发人员同时处理同一应用的不同功能。但是,如果企业安排在一天内将所有分支源代码合并在一起(称为“合并日”),最终可能造成工作繁琐、耗时,而且需要手动完成。这是因为当一位独立工作的开发人员对应用进行更改时,有可能会与其他开发人员同时进行的更改发生冲突。如果每个开发人员都自定义自己的本地集成开发环境(IDE),而不是让团队就一个基于云的 IDE 达成一致,那么就会让问题更加雪上加霜。

持续集成(CI)可以帮助开发人员更加频繁地(有时甚至每天)将代码更改合并到共享分支或“主干”中。一旦开发人员对应用所做的更改被合并,系统就会通过自动构建应用并运行不同级别的自动化测试(通常是单元测试和集成测试)来验证这些更改,确保这些更改没有对应用造成破坏。这意味着测试内容涵盖了从类和函数到构成整个应用的不同模块。如果自动化测试发现新代码和现有代码之间存在冲突,CI 可以更加轻松地快速修复这些错误。

2. 持续交付(CD)

CD建立在CI的基础上,它的目标是自动化从构建到部署的整个交付过程,以便在任何时候都可以快速、可靠地将软件推送到生产环境。

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

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

3. 持续部署(CD)

对于一个成熟的 CI/CD 管道来说,最后的阶段是持续部署。作为持续交付——自动将生产就绪型构建版本发布到代码存储库——的延伸,持续部署可以自动将应用发布到生产环境。由于在生产之前的管道阶段没有手动门控,因此持续部署在很大程度上都得依赖精心设计的测试自动化。

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

二、CI/CD关键步骤:

  1. 代码管理: 使用版本控制系统,如Git,确保代码的版本和变更都能被追踪。
  2. 自动化构建: 使用构建工具,如Jenkins、Travis CI等,自动化执行构建和单元测试。
  3. 自动化测试: 包括单元测试、集成测试和端到端测试,以确保代码质量。
  4. 持续交付: 制定自动化的部署流程,使得每次通过CI的代码变更都能快速而安全地部署到生产环境。
  5. 监控与反馈: 设置监控系统,追踪应用性能和问题,同时建立反馈机制,及时发现并修复构建和部署的问题。

三、 Netflix Tech Stack (CI/CD Pipeline)

  1. 规划:Netflix Engineering 使用 JIRA 进行规划,使用 Confluence 进行文档编写。
  2. 编码:Java 是后端服务的主要编程语言,而其他语言用于不同的用例。
  3. 构建:主要使用 Gradle 进行构建,并构建了 Gradle 插件以支持各种用例。
  4. 打包:将包和依赖项打包成 Amazon Machine Image (AMI) 进行发布。
  5. 测试:测试强调了生产文化对构建混沌工具的关注。
  6. 部署:Netflix 使用其自建的 Spinnaker 进行金丝雀发布部署。
  7. 监控:监控指标集中在 Atlas 中,使用 Kayenta 来检测异常。
  8. 事故报告:根据优先级分派事故,使用 PagerDuty 进行事故处理。

四、常用的 CI/CD 工具有哪些?

CI/CD 工具可以协助团队自动进行开发、部署和测试。有些工具专门处理集成(CI)方面的问题,有些工具负责管理开发和部署(CD)工作,而另外一些工具则专注于持续测试或相关功能。

针对 CI/CD 的最著名的开源工具之一就是自动化服务器 Jenkins。从简单的 CI 服务器到完整的 CD 集线器,Jenkins 都可以处理。

在红帽 OpenShift 上部署 Jenkins

Tekton Jenkins 是一个面向 Kubernetes 平台的 CI/CD 框架,可通过容器为您提供标准的云原生 CI/CD 体验。

在红帽 OpenShift 上部署 Jenkins

除了 Jenkins 和 Tekton Pipelines,您可能想要研究的其他开源 CI/CD 工具包括:

  • Spinnaker,一个面向多云环境构建的 CD 平台。

  • GoCD,一个侧重于建模和可视化呈现的 CI/CD 服务器。

  • Concourse, “一个开源的持续作业器”。

  • Screwdriver,一个面向 CD 设计的构建平台。

此外,团队也可考虑使用托管式 CI/CD 工具,它们可从不同供应商处获得。主流公共云提供商全部提供 CI/CD 解决方案,以及 GitLab、CircleCI、Travis CI、Atlassian Bamboo 及众多其他工具。

此外,任何工具只要是 DevOps 的基本工具,就有可能属于 CI/CD 流程的一部分。用于配置自动化(如 Ansible、Chef 和 Puppet)、容器运行时(如 Docker、rkt 和 cri-o)以及容器编排(如 Kubernetes)的工具严格来说不算是 CI/CD 工具,但它们也现身于许多 CI/CD 工作流中。

根据您首选的应用开发策略和云提供商,您可以采用多种不同的方法来实施 CI/CD。AWS 上的红帽 ® OpenShift® 服务有多个选项可让您自己的 CI/CD 工作流程变得更轻松,例如 Tekton 和 OpenShift Pipelines。通过使用红帽 OpenShift,企业组织可以利用 CI/CD 跨多个本地和云平台自动构建、测试和部署应用。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/209035.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣刷题笔记——反转链表

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 经典问题反转链表 这里给出四种解法 1.双指针 这种方法是用一个next指针记录当前节点的下一个节点,一个pre指针记录当前节点的前一个节点。 只需要遍历一遍链表就可以完成链表的反转 c…

idea__SpringBoot微服务05——JSR303校验(新注解)(新的依赖),配置文件优先级,多环境切换

JSR303校验,配置文件优先级,多环境切换 一、JSR303数据校验二、配置文件优先级三、多环境切换一、properties多环境切换二、yaml多环境切换————————创作不易,如觉不错,随手点赞,关注,收藏(*&#x…

电脑待机怎么设置?让你的电脑更加节能

在日常使用电脑的过程中,合理设置待机模式是一项省电且环保的好习惯。然而,许多用户对于如何设置电脑待机感到困扰。那么电脑待机怎么设置呢?本文将深入探讨三种常用的电脑待机设置方法,通过详细的步骤,帮助用户更好地…

【C语言期末】题目+笔记

文章目录 题目1.下面哪个不是C语言的基本数据类型?( B )2.C语言的标识符应以字母或( A )开头。3.如果需要在C程序里调用标准函数库中的printf函数,则应该在程序的开头包含哪个头文件?&#xff0…

【数据结构】顺序表的定义和运算

目录 1.初始化 2.插入 3.删除 4.查找 5.修改 6.长度 7.遍历 8.完整代码 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo__✍️原创,首发于CSDN📚。 &…

web前端开发html/css练习

目标图&#xff1a; 素材&#xff1a; 代码&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"…

使用RSA工具进行对信息加解密

我们在开发中需要对用户敏感数据进行加解密&#xff0c;比如密码 这边科普一下RSA算法 RSA是非对称加密算法&#xff0c;与对称加密算法不同;在对称加密中&#xff0c;相同的密钥用于加密和解密数据,因此密钥的安全性至关重要;而在RSA非对称加密中&#xff0c;有两个密钥&…

【USRP】5G / 6G OAI 系统 5g / 6G OAI system

面向5G/6G科研应用 USRP专门用于5G/6G产品的原型开发与验证。该系统可以在实验室搭建一个真实的5G 网络&#xff0c;基于开源的代码&#xff0c;专为科研用户设计。 软件无线电架构&#xff0c;构建真实5G移动通信系统 X410 采用了目前流行的异构式系统&#xff0c;融合了FP…

SQLite基本使用

目录 1. 概述2. 引入SQLite3. 连接数据库创建游标4. 创建数据库文件5. 新增单条数据6. 批量新增数据7. 查询单条数据8.查询全部数据9. 查询指定条数的数据10. 修改数据11. 删除数据12. 事务回滚13. 关闭数据库关闭游标1. 概述 SQLite是一个进程内的库,实现了自给自足的、无服务…

【嵌入式开发 Linux 常用命令系列 4.2 -- .repo 各个目录介绍】

文章目录 概述.repo 目录结构manifests/default.xmlManifest 文件的作用default.xml 文件内容示例linkfile 介绍 .repo/projects 子目录配置和管理configHEADhooksinfo/excludeobjectsrr-cache 工作区中的对应目录 概述 repo 是一个由 Google 开发的版本控制工具&#xff0c;它…

使用 OMSA 和 OME 工具管理多个服务器

文章目录 Dell Remote Access Controller (iDRAC)OpenManage Server Administrator&#xff08;OMSA&#xff09;OpenManage EnterpriseSupportAssist Enterprise推荐阅读 在DELL服务器的管理工具中&#xff0c;有多个管理工具&#xff0c;今天我们将分享这几个工具的关联性以及…

2023-12-08 工作心得

1 别名不能作为 同一个sql里的where里条件约束 因为别名是在查询结果生成后才得到的&#xff0c;而 WHERE 子句是在查询结果生成前进行的筛选操作&#xff0c;所以别名不能直接用于 WHERE 子句中的条件筛选。 2 jpa sql里如果是删除或修改&#xff0c;加注解 modifying transa…

STM32的几个深入功能

STM32的几个深入功能 目录 1、时钟源2、锁相环3、备份SRAM4、low power mode5、DMA Flash RAM6、复位类型7、CMSIS8、STM32F4学习方法9、中断10、8080 并行接口11、FSMC12、ADC13、IIC14、SPI15、48516、CAN17、MPU6050六轴传感器18、NRF24L01 2.4G无线模块19、FLASH20、外部SR…

【Git系列】branch和tag

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

将单体应用程序迁移到微服务

多年来&#xff0c;我处理过多个单体应用&#xff0c;并将其中一些迁移到了微服务架构。我打算写下我所学到的东西以及我从经验中用到的策略&#xff0c;以实现成功的迁移。在这篇文章中&#xff0c;我将以AWS为例&#xff0c;但基本原则保持不变&#xff0c;可用于任何类型的基…

云原生系列1

1、虚拟机集群环境准备 VirtualBox类似vmware的虚拟化软件&#xff0c;去官网https://www.virtualbox.org/下载最新版本免费的&#xff0c;VirtualBox中鼠标右ctrl加home跳出鼠标到wins中。 VirtualBox安装步骤 https://blog.csdn.net/rfc2544/article/details/131338906 cent…

微信小程序:button微信开放能力打开客服会话分享到聊天框

文档 https://developers.weixin.qq.com/miniprogram/dev/component/button.html 打开客服会话 按钮关键属性 open-type"contact"功能按钮 <button class"mo-open-type"open-type"contact"> </button>分享 <button class&q…

Hive HWI 配置

前言 1、下载安装好hive后&#xff0c;发现hive有hwi界面功能&#xff0c;研究下是否可以运行&#xff0c;于是使用hive –service hwi命令启动hwi界面报错。 启动hwi功能 2、访问192.168.126.110:9999/hwi&#xff0c;发现访问错误 一、HWI介绍 HWI&#xff08;Hive Web Int…

【前端】CSS基础(学习笔记)

一、简介 1、HTML局限性 HTML只关注内容的语义&#xff0c;但是丑&#xff01; 2、CSS概要 CSS 是层叠样式表 ( Cascading Style Sheets ) 的简称&#xff0c;有时我们也会称之为 CSS 样式表或级联样式表。 CSS 是也是一种标记语言 CSS 主要用于设置 HTML 页面中的文本内…

blender 粒子系统 roughness 属性

粒子系统中的Roughness是一种用来控制粒子的随机性和不规则性的属性&#xff0c;它可以影响粒子的发射方向、速度、大小、旋转等。Roughness有以下几个子属性&#xff1a; - **Uniform**&#xff1a;这个属性用来控制粒子的发射方向的随机性&#xff0c;即粒子在法线方向上的偏…