【DevOps】DevOps—基本概念
文章目录
- 1. DevOps
- 2. CI/CD
1. DevOps
维基百科定义:
DevOps是一组过程、方法与系统的统称,用于促进 开发、技术运营 和 质量保障(QA) 部门之间的沟通、协作与整合。我理解DevOps是一种软件管理思维模式。
为什么会有DevOps呢,或者说软件开发领域是怎么样演变出DevOps这个概念的呢?
项目管理模式的演变是受项目的规模大小影响的。
最初阶段,项目软件功能比较简单,工作量不大,程序员一个人可以完成规划、编码、构建、测试、发布、部署和维护所有阶段的工作。
后来,项目扩大,软件的规模也在逐渐变得庞大,采有传统瀑布流模型。团队里面除了软件开发工程师之外,又有了软件测试工程师,软件运维工程师,各个工种分工合作,一个阶段所有工作完成之后,再进入下一个阶段。
再后来,随着项目的再次扩大,用户对系统的需求不断增加,与此同时,用户给的时间周期却越来越少,时间周期比较长的瀑布流模式不再适用,于是就出现了“敏捷开发”,为的就是小步快跑,持续迭代,快速发现问题,快速解决问题,快速和用户、业主进行确认。
再然后,在现今这个时代,对变化进行响应的要求越来越高,可以一个项目几天就要迭代上线一版。而从上面的图也可以看到,敏捷开发大幅提升了软件开发的效率和版本更新的速度,但是它的效果仅限于开发环节,运维部署成为瓶颈。运维的核心就是维稳,不出问题,这导致了开发快速迭代的版本很难快速正式上线。
这时候,DevOps这个概念才被提出和关注。从目标来看,DevOps就是让开发人员和运维人员更好地沟通合作,通过自动化流程来使得软件整体过程更加快捷和可靠。而从DevOps概念提出到现在,也不仅仅只是要打通开发和运维的壁垒了,而是扩大到整个项目团队涉及到所有角色,也包括了市场、需求等人员。
DevOps 的三大支柱,即人(People)、流程(Process)和平台(Platform)。
DevOps = 人 + 流程 + 平台
人 + 流程 = 文化
流程 + 平台 = 工具
平台 + 人 = 赋能
这是这个行业演变过程,也是一个公司从成立,到发展壮大的过程,一个公司的项目管理模式演变过程是整个行业演变过程的缩影,不同阶段有不同阶段的模式,达到一定阶段才有改变的必要,不过我们如果提前有这些了解,提前有所准备,那边在转变的过程中就可以少些弯路和内耗。
DevOps要做就是使用技术工具按照标准化的流程统筹各个阶段的人和人的行为,实现快速交付。它的落地考验的不仅是一家企业的技术,更是管理水平和企业文化,需要一家公司从上到下进行思维转变,并且重新梳理全流程的规范和标准。技术(工具和平台)是最容易实现的,流程次之,思维转变反而最困难。
虽然思维转变是最重要的,但是思维转变没法凭空而来,不可能看一下概念,听一下别人的描述就可以转变过来。只有身处在那样的环境,体会到确切的痛点,如一个公司随着规模的扩大,项目变得复杂,发现按照以前的项目执行方式每次都是亏钱,这样才有可能引发思考,如果这时再体验到相关地技术带来的便利和好处,这样才有可能引发思维的转变。
对于DevOps的介绍,大家可以再看看以下文章,感觉这两篇还是讲得比较清楚的,我这里也借鉴了他们。
DevOps到底是什么意思?
https://www.zhihu.com/question/58702398?sort=created
对于开发人员个人而言,虽然DevOps实施落地中技术和工具是最简单的,但是我们还是要先了解技术和工具,从中体会它与我们日常工作流程的差别,引发思考,同时也为可能用到的时机进行准备积累。
2. CI/CD
DevOps涉及开发的各个阶段,涉及到各个阶段的人,人的思维转变是最难的,而标准的流程和规范是DevOps的基础,是将各个阶段的人和行为管理起来的根本,平台则是流程自动化的技术工具。其中,CI/CD是DevOps中最能体现流程化的一个阶段,旨在通过技术工具搭建标准自动化流水线过程,减少重复工作的资源浪费。
CI/CD是伴随着DevOps出现的两个词汇,CI是Continuous Integration(持续集成),而CD对应多个英文,Continuous Delivery(持续交付)或Continuous Deployment(持续部署)。所谓持续就是即时和反复,为的就是及时发现问题,及时响应。
持续集成:
持续集成是指多名开发者在开发不同功能代码的过程当中,可以频繁的将代码行合并到一起,然后进行自动化测试,并且不会相互影响工作。
持续交付:
持续交付是指在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」中。比如,我们完成单元测试后,可以把代码部署到连接数据库的 Staging 环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境中。
持续部署
在持续交付的基础上,把部署到生产环境的过程自动化。如果你对比上图持续部署就可以发现持续部署和持续交付的区别就是最终部署到生产环境是自动化的。
关于CI/CD概念更多的了解,可以再看一下以下文章:什么是CI/CD
从上面的几个图可以看出,要实现CI/CD最起码需要一个固定的流程和三个工具。流程需要规定从代码开发到生产环境需要经过哪些阶段,每个阶段需要做什么,如果一个阶段没有达到预期应该怎么做,这个流程不同公司会有所不同,也是每个企业管理方式的体现。最基本的三个工具包括源代码管理工具(SCM)、自动化构建平台,消息通知工具。
平台工具各个公司各有不同,大家日常工作中也各有熟悉的工具,DevOps也不仅仅CI/CD需要平台工具,如项目管理、需求、原型和UI管理都需要工具,这里只是介绍CI/CD过程相关的。
源代码管理工具一般选择 GitLab,也可以用Gitbilit等其他的,这些大家都应该很熟悉,毕竟是日常工作中必不可少要接触的。
自动化构建平台成熟的有很多,GitLab也自带有CI/CD模块可以用,而这里要采有的是开源且发展历史长久,广泛使用和最好的CI/CD工具之一的Jenkins。
消息通知可以用邮件,也可以通知到钉钉等办公软件中。
之后的文章将介绍相关工具的部署和准备,并结合k8s做一些生产环境中的示例。
相关文章:
【DevOps】DevOps—基本概念
文章目录 1. DevOps2. CI/CD 1. DevOps 维基百科定义: DevOps是一组过程、方法与系统的统称,用于促进 开发、技术运营 和 质量保障(QA) 部门之间的沟通、协作与整合。我理解DevOps是一种软件管理思维模式。 为什么会有DevOps呢&…...

发行版兴趣小组季度动态:Anolis OS 支持大热 AI 软件栈,引入社区合作安全修复流程
发行版兴趣小组(Special Interest Group) :旨在为龙蜥社区构建、发布和维护一个稳定的操作系统发行版。 秋天的季节,发行版兴趣小组在 AI、安全、国产 OS 领域同样也是硕果累累。一起来看一下第三季度发行版兴趣小组的成果总结有…...

android app开发环境搭建
Android是流行的移动设备原生应用开发平台,其支持Java语言以及Kotlin语言的开发环境,本文主要描述官方提供的Android studio集成开发环境搭建。 https://developer.android.google.cn/ 如上所示,从官方上下载最新版本的Android studio集成开…...
oracle入门笔记一
关系型数据库(Oracle) 一、市面上流行的关系型数据库 大型数据库:oracle(甲骨文)、DB2(IBM)、sysbase(sysbase) 百万以上数据 中型数据库:mysql…...

linux下安装ffmpeg的详细教程、ffmpeg is not installed
1、下载解压 wget http://www.ffmpeg.org/releases/ffmpeg-6.0.tar.gz tar -zxvf ffmpeg-6.0.tar.gz 2、 进入解压后目录,输入如下命令/usr/local/ffmpeg为自己指定的安装目录 cd ffmpeg-6.0 ./configure --prefix/usr/local/ffmpeg make sudo make install 3、配置变量 v…...

ctfshow-ssti
web361 名字就是考点,所以注入点就是name 先测试一下存不存在ssti漏洞 利用os模块,脚本 查看一下子类的集合 ?name{{.__class__.__base__.__subclasses__()}} 看看有没有os模块,查找os 利用这个类,用脚本跑他的位置 import …...
【ES6 03】变量解构赋值
变量解构赋值 数组解构赋值1 基操2 默认值 对象的解构赋值默认值注意 字符串的解构赋值数值与布尔值的解构赋值函数参数的解构赋值圆括号不得使用 作用 数组解构赋值 1 基操 ES6允许按照一定的模式从数组和对象中提取值从而对变量进行赋值,也即解构(De…...

RustDay03——记录刷完Rust100题
刷了两三天Rust,终于把Rust100题刷完了,小小记录一下 明天白天的时候重开账户开题写答案...

微软10月补丁 | 修复103个漏洞,包括2个零日漏洞,13个严重漏洞
近日,微软发布了2023年10月的补丁更新,解决了其软件中的103个漏洞。 在这103个漏洞中,有13个的评级为严重漏洞,90个被评为重要漏洞。自9月12日以来,谷歌已经解决了基于chrome的Edge浏览器的18个安全漏洞。 这两个零日…...

ubuntu编写makefile编译c++程序
常见的编译工具 gcc/gvisual cclang 编译一个简单的程序 main.cpp #include <iostream>int main() {std::cout << "hello world" << std::endl;return 0; }gcc 编译 源文件(.cpp)编译生成目标文件(.o…...
详解COCO数据格式的json文件内容
coco标注格式的json文件详解 # coco_json结构示意 {info:info,licenses:[licenses],images:[image],annotations:[annotation] } 1. **images**:这个部分包含了所有图像的信息。每个图像都表示为一个字典,包含以下字段: - id:…...

2023.10.12
#include <iostream>using namespace std; //定义动物类 class Animal { private:string name; public:Animal(){}Animal(string name):name(name){}~Animal(){}//定义虚函数virtual void perform()0;//表演的节目void show(){cout << "Please enjoy the spec…...

antd Form shouldUpdate 关联展示 form 数组赋值
form 数组中嵌套数值更新 注意:数组是引用类型 项目需求,表单中包含多个产品信息,使用form.list 数组嵌套,提货方式如果是邮寄展示地址,如果是自提,需要在该条目中增加两项 代码如下:// An hi…...

vue实现一个简单导航栏
Vue之简单导航栏 在vue中,想要实现导航栏的功能,除了用传统的a标签以外,还可以使用路由——vue-router来实现,前端小白在此记录一下学习过程(默认已经搭建好vue的脚手架环境): 建立项目并安装…...

每日leetcode_LCP01猜数字
每日leetcode_LCP01猜数字 记录自己的成长,加油。 题目出处:LCP 01. 猜数字 - 力扣(LeetCode) 题目 解题 class Solution {public int game(int[] guess, int[] answer) {int count 0;for (int i 0 ; i< guess.length; i){…...

接口自动化测试_L1
目录: 接口自动化测试框架介绍 接口测试场景自动化测试场景接口测试在分层测试中的位置接口自动化测试与 Web/App 自动化测试对比接口自动化测试与 Web/App 自动化测试对比接口测试工具类型为什么推荐 RequestsRequests 优势Requests 环境准备接口请求方法接口请求…...

Windows提权
1. MySQL提权 1.1 UDF提权 udf ‘user defined function’,即’用户自定义函数’。是通过添加新函数,对MYSQL的功能进行扩充 1、如何获得udf文件 2、将文件放到哪才能让mysql承认这个函数 3、函数功能 4、为什么这东西能提权(自定义函数指令是直接…...
香港服务器的优势?
香港服务器作为近年来国内站长建站使用最为频繁的服务器之一,香港服务器是不需要备案的,而且相对于众多国内服务器 来说,的确是有诸多优势,下面就来具体说下选择香港服务器的优势: 1、访问速度快 搭建网站,…...
关于开展2023年度光明科学城出站博士后生活资助申报工作的通知
各相关单位: 根据《光明区关于实施光明科学城“人才高地计划”的若干措施》(深光发〔2022〕1号)和《光明科学城青年科技人才培育专项行动方案》(深光人才〔2022〕2号)有关规定,现就2023年度光明科学城出站博…...

“.NET视频总结:认识框架的结构和组件,掌握开发工具的奥妙“
目录 第一单元:二十一世纪程序执行 背景: 总结: 第二单元:对象导向与类别设计 背景: 总结: 第三单元:使用类别与基底类别库 背景: 总结: 第四单元:Windows开发程序 背景: 总结: 第五单元:防护式程序设计 背景: 总结…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7
在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤: 第一步: 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为: // 改为 v…...

数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 原创笔记:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:《数据结构第4章 数组和广义表》…...