持续集成和持续交付

引言

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.hqwc.cn/news/259593.html

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

相关文章

浅谈WPF之控件拖拽与拖动

使用过office的visio软件画图的小伙伴都知道,画图软件分为两部分,左侧图形库,存放各种图标,右侧是一个画布,将左侧图形库的图标控件拖拽到右侧画布,就会生成一个新的控件,并且可以自由拖动。那如…

从互联网到云计算再到 AI 原生,百度智能云数据库的演进

1 数据库行业发展概述 如果说今年科技圈什么最火,我估计大家会毫不犹豫选择 ChatGPT。ChatGPT 是 2022 年 11 月 30 日由 OpenAI 发布的聊天应用。它创造了有史以来用户增长最快的纪录:自 11 月 30 日发布起,5 天就拥有了 100 万活跃用户&am…

【Vue3从入门到项目实现】RuoYi-Vue3若依框架前端学习——动态路由与菜单栏

菜单栏 若依框架的侧边栏组件通常由菜单项和子菜单组成。 登录后,会获取用户拥有的路由菜单 {"msg": "操作成功","code": 200,"data": [{"name": "System","path": "/system",…

进程、线程、线程池状态

线程几种状态和状态转换 进程主要写明三种基本状态: 线程池的几种状态:

oracle实验2023-12-8--触发器

第十四周实验 【例】功能要求:增加一新表XS_1,表结构和表XS相同,用来存放从XS表中删除的记录。 分析: 1、创建表 xs_1 SQL> create table xs_1 as select * from xs; Table created SQL> truncate table xs_1; Table truncated题目&a…

微信小程序 bindtap 事件多参数传递

在微信小程序中,我们无法直接通过 bindtap"handleClick(1,2,3)" 的方式传递参数,而是需要通过自定义属性 data- 的方式进行传递,并在事件回调函数中通过 event.currentTarget.dataset 来获取这些参数。然而,这种传参方式…

代理IP怎么使用?Mac苹果系统设置http代理IP教程

代理IP是一种通过将请求转发到另一个服务器,以隐藏自己的真实IP地址的服务器。使用代理IP可以保护您的隐私和安全,防止被跟踪或被攻击。在本文中,我们将介绍如何在Mac苹果系统上设置http代理IP教程。 一、了解代理IP 代理IP地址是一种可以用来…

自动化使用GradCAM处理图片(用于ViT和swin的变体)附链接

GradCAM_On_ViT 用于可视化模型结果的 GradCAM 自动脚本 如何在 GradCam 中调整 XXXFormer 请确保您的模型格式正确。 如果您应用的变压器是类似 swin(无ClassToken)或类似 ViT (有ClassToken) 张量的形状可能看起来像[Batc…

从根上理解elasticsearch(lucene)查询原理(1)-lucece查询逻辑介绍

大家好,我是蓝胖子,最近在做一些elasticsearch 慢查询优化的事情,通常用分析elasticsearch 慢查询的时候可以通过profile api 去分析,分析结果显示的底层lucene在搜索过程中使用到的函数调用。所以要想彻底弄懂elasticsearch慢查询…

UDP群聊

客户端 import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader…

hbuilder + uniapp +vue3 开发微信云小程序

1、创建项目: 2、创建项目完成的默认目录结构: 3、在根目录新建一个文件夹cloudFns(文件名字随便),存放云函数源码: 4、修改manifest.json文件:添加 小程序 appid和cloudfunctionRoot&#xff0…

Docker安装Mysql数据库

1. 前言 XXXXX 2. Docker中安装MySQL服务 以下以mysql8.2版本为例,mysql5.7的步骤也是一样的 2.1. 查看可用的MySQL版本 # 搜索镜像 docker search mysql2.2. 拉取MySQL镜像 # 拉取镜像 docker pull mysql# 或者 docker pull mysql:latest2.3. 查看本地镜像 …