摘要:说起GitOps,可能很多朋友马上会联想到DevOps,那么GitOps和DevOps之间有什么关系、又有什么区别呢?

本文分享自华为云社区《浅谈GitOps》,作者: 敏捷的小智。

GitOps与DevOps

说起GitOps,可能很多朋友马上会联想到DevOps,那么GitOps和DevOps之间有什么关系、又有什么区别呢?

DevOps是一种文化

DevOps包含了Development和Operations两个部分,是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。

如今很多团队当中都在践行着DevOps文化,其中核心的一条理念就是“自动化一切可自动化的”。而GitOps,也正是基于这种理念下而诞生的一种持续交付方式。

GitOps是一种持续交付方式

GitOps核心思想是将应用系统的声明性基础架构和应用程序存放在Git版本库中。

将Git作为交付流水线的核心,每个开发人员都可以提交拉取请求(Pull Request)并使用Git​​来加速和简化应用程序部署和运维任务。通过使用Git,开发人员可以更高效地将注意力集中在创建新功能而不是运维相关任务上(例如,应用系统安装、配置、迁移等)。

同时,GitOps还是一整套CI/CD流水线方案。

在GitOps中可以自由地为流水线的不同部分选择最佳工具。可以从开源生态系统中选择一组工具,也可以从封闭源中选择一组工具,或者根据使用情况,甚至可以将它们组合在一起。

不过目前业界已经有了不少端到端的DevOps平台,华为云DevCloud就可以一站式端到端地覆盖CI/CD全流程。让开发者不必再纠结于如何选择流水线中的不同部分。从项目管理、代码开发,到编译构建、部署发布、测试运维,软件开发的全生命周期都可以在华为云DevCloud上完成。

当然,也可以只使用华为云DevCloud中的个别服务与已有流水线进行拼接,搭建成新的CI/CD流水线。例如,在DevCloud中可以由代码托管服务CodeHub来作为本期主题GitOps中的Git仓库。

GitOps 流水线

GitOps 基于拉模式构建交付流水线。在DevCloud中以GitOps的方式搭建的交付流水线,流程如下:

1、 源码存储于CodeHub,开发人员推送提交包含新功能的代码到代码仓库的对应分支中;代码审核通过后将被合并至对应分支。

2、 合并请求通过后会触发构建(CloudBuild)并进行测试,构建好的镜像将被推送至镜像仓库SWR中。

3、 GitOps检测到有新的镜像,会提取最新的镜像标记,然后同步到 Git 配置仓库(Config)的清单中。

4、 GitOps检测到集群状态过期,会从配置仓库(Config)中拉取更新后的清单,并将包含新功能的镜像通过CloudDeploy部署到集群(CCE)里。

对于不同环境而言,可以在Config仓中创建多个子目录或者子分支管理不同环境对应的多个集群,从而实现多环境的GitOps。

点击关注,第一时间了解华为云新鲜技术~

一文带你了解什么是GitOps的更多相关文章

  1. Istio是啥?一文带你彻底了解!

    原标题:Istio是啥?一文带你彻底了解! " 如果你比较关注新兴技术的话,那么很可能在不同的地方听说过 Istio,并且知道它和 Service Mesh 有着牵扯. 这篇文章可以作为了解 ...

  2. 一文带您了解5G的价值与应用

    一文带您了解5G的价值与应用 5G最有趣的一点是:大多数产品都是先有明确应用场景而后千呼万唤始出来.而5G则不同,即将到来的5G不仅再一次印证了科学技术是第一生产力还给不少用户带来了迷茫——我们为什么 ...

  3. 一文带你了解elasticsearch

    一文带你了解elasticsearch cxf2102100人评论160人阅读2019-07-02 21:31:36   elasticsearch es基本概念 es术语介绍 文档Document ...

  4. 【转帖】Istio是啥?一文带你彻底了解!

    Istio是啥?一文带你彻底了解! http://www.sohu.com/a/270131876_463994 原始位置来源: https://cizixs.com 如果你比较关注新兴技术的话,那么 ...

  5. 一文带你了解 C# DLR 的世界

    一文带你了解 C# DLR 的世界 在很久之前,我写了一片文章dynamic结合匿名类型 匿名对象传参,里面我以为DLR内部是用反射实现的.因为那时候是心中想当然的认为只有反射能够在运行时解析对象的成 ...

  6. 一文带你看清HTTP所有概念(转)

    一文带你看清HTTP所有概念   上一篇文章我们大致讲解了一下 HTTP 的基本特征和使用,大家反响很不错,那么本篇文章我们就来深究一下 HTTP 的特性.我们接着上篇文章没有说完的 HTTP 标头继 ...

  7. 一文带你了解js数据储存及深复制(深拷贝)与浅复制(浅拷贝)

    背景 在日常开发中,偶尔会遇到需要复制对象的情况,需要进行对象的复制. 由于现在流行标题党,所以,一文带你了解js数据储存及深复制(深拷贝)与浅复制(浅拷贝) 理解 首先就需要理解 js 中的数据类型 ...

  8. 【项目实践】一文带你搞定Spring Security + JWT

    以项目驱动学习,以实践检验真知 前言 关于认证和授权,R之前已经写了两篇文章: [项目实践]在用安全框架前,我想先让你手撸一个登陆认证 [项目实践]一文带你搞定页面权限.按钮权限以及数据权限 在这两篇 ...

  9. 一文带你看遍 JDK9~14 的重要新特性!

    Java9 发布于 2017 年 9 月 21 日 .作为 Java8 之后 3 年半才发布的新版本,Java 9 带 来了很多重大的变化其中最重要的改动是 Java 平台模块系统的引入,其他还有诸如 ...

  10. 让自己写的电子笔记连文带图全平台兼容(MarkDown图片显示兼容)

    目录 一.工具使用 语言使用:MarkDown 简介 使用原因 使用方法 软件使用:Typora 简介 环境设置搭建 1)搭建图床 2)配置PicGo 3)配置typora 4)测试 图片上传测试 平 ...

随机推荐

  1. 从零开始编写一个 Python 异步 ASGI WEB 框架

    从零开始编写一个 Python 异步 ASGI WEB 框架 前言 本着 「路漫漫其修远兮,吾将上下而求索」 的精神,这次要和朋友们分享的内容是<从零开始编写一个 Python 异步 ASGI ...

  2. HTML5学习内容-3

    (一)行高 line-height,一行文字的高度 例子 <!DOCTYPE html> <html lang="en"> <head> < ...

  3. HTTP请求中浏览器的缓存机制(转)

    摘要:在Web开发过程中,我们可能会经常遇到浏览器缓存的问题.本文作者详细解释了浏览器缓存的机制,帮助读者更深层次的认识浏览器的缓存. 流程 当资源第一次被访问的时候,HTTP头部如下 (Reques ...

  4. RT-Thread 中 minIni 组件包无法添加的解决方法

    事件 今天在 Env 下添加 minIni 包的时候出现了无法将其添加到工程的情况.借此机会来记录一下如何解决该类问题. 如果你想快速排错可以直接到 [2.minIni 组件出现的问题]查看. 一.准 ...

  5. Vite4+Typescript+Vue3+Pinia 从零搭建(3) - vite配置

    项目代码同步至码云 weiz-vue3-template 关于vite的详细配置可查看 vite官方文档,本文简单介绍vite的常用配置. 初始内容 项目初建后,vite.config.ts 的默认内 ...

  6. 神经网络入门篇:激活函数(Activation functions)

    激活函数 使用一个神经网络时,需要决定使用哪种激活函数用隐藏层上,哪种用在输出节点上.到目前为止,之前的博客只用过sigmoid激活函数,但是,有时其他的激活函数效果会更好. 在神经网路的前向传播中, ...

  7. L2-031 深入虎穴

    并没有说根是谁 #include <bits/stdc++.h> using namespace std; using pii = pair<int, int>; const ...

  8. python列表排序之sort(),sorted()和reverse()

    sort() 正序 sort()可以按字母的顺序来对列表进行永久性排序(改变列表自身的排序): list_1 = ['one', 'two', 'three', 'four', 'five'] pri ...

  9. EMCC13.5+Oracle19.13+Redhat8 In Silent Mode

    问题描述:使用静默的方式来安装emcc13.5+Oracle19.13,准备好19c的oracle环境,一开始用21c的库+emcc13.5的安装检查一直过不去,但是19c是没有问题的,具体问题会在下 ...

  10. 前端传递Base64字符串,后端转流存入OSS

    工具类 public static BufferedInputStream base64Convert(String base64) { // 解码 base64 = base64.split(&qu ...