扯闲淡

在进入正式话题之前,先扯个淡,这算是第一篇我正式在博客上发布的随笔吧,之前也一直有想写点什么,将自己多年的工作经验分享出来,供大家参考点评,但是奈何一直对自己的文字功底不自信(其实也确实比较烂,上学期间,语文永远是拖后腿的),当然,最主要还是因为自己的懒惰,导致一直没有付出行动。

细算下来,到目前为止,我从事.Net开发已经差不多八年了,也算是一只见证了.Net从兴起到衰落(不知道这么说会不会被打)再到逐渐有复苏迹象的老鸟了。在这个过程中,带过团队,也担任过架构师(当时为了证明自己并非野路子,2018年还专门拿下了软考《系统架构设计师》认证)。在企业内部Wiki上也写过不少文章,做过不少技术分享,但毕竟是小群体,文章写得再烂(甚至只有提纲,或者只字片语,或者只有一张图),也可以通过沟通解释清楚,就算真的写错了,也会有很多补救措施,不会产生什么不良影响。而对外发布,对内容的完整性,严谨性以及文字组织能力的要求就要高得多,而这正是我不得不花精力填补的短板。

2020年注定是不平凡的一年,对于我们这些.Neter来说更是如此,我不确定能否通过文字完整的出自己的思想,但是我会尽力,希望我的文字不会带偏你的思路,当然,如果你能赞同我的观点,并能从中得到一点点启发,那将是我莫大的荣幸。

好了,闲淡扯完了,进入今天的正题吧!

总体架构

在这里,我准备结合自己的工作经历和个人理解,针对当前比较火热的DevOps话题出一个文章系列。但是,在这之前,有必要从整体上梳理一下思路,圈定一下范围,以保证整体思想的一致,并方便后续文章的展开。

这个系列并没有涵盖DevOps的全部内容,例如,没有包含服务的链路追踪、日志监控、健康检查等微服务相关的部分,也没有包括集群和容器的监控、管理、健康检查、报警等更偏向运维的部分,而是更多的聚焦在CI/CD上。微服务相关的部分后面可能单会独写一个系列详细探讨,而运维相关部分则不会过多涉及,即使是K8S容器编排也只会点到为止,因为这部分我自己接触的也比较少,不敢瞎写。

概览

注意,这里的Jenkins并非部署了多套,而是在同一套Jenkins中根据部署环境的不同划分了多个分组,每个分组有各自不同的权限和功能。

流程说明

  1. 开发人员每次写完代码之后,Push到源代码仓库(企业中一定会有自己SVN或者Git等私有仓库,这是即使没有DevOps或CI/CD概念也会存在的最基本的基础设施,我后续会直接使用GitHub,因此不会单独介绍这部分内容),自动(或者定时轮询)触发Jenkins构建,完成Nuget包还原,静态代码审查,单元测试,上传报告到SonarQube服务器,如果构建失败,或者代码审查和单元测试报告不达标(实际工作中,由于各种原因,这个目标比较难以达到),则反馈开发修复,如果达标则构建镜像并发布到开发环境的Docker容器中;
  2. 开发人员功能开发完成,并通过开发环境容器测试通过后,将Dev分支合并到Master分支,并发送提测通知到测试人员;
  3. 测试人员(可以在分支合并的时候自动触发,或者定时轮询)构建Master分支,大体流程跟开发分支相同,不同点就是会发布到尽量贴近生产环境的Docker集群,同时将镜像Push到Harbor镜像仓库;
  4. 测试人员测试通过后,通知运维人员安排上线;
  5. 运维人员通过手动触发Jenkins的方式,先从Harbor上Pull对应版本的镜像,并逐步分阶段完成到生产环境Docker集群的部署。
  6. 剩下的就是生产环境α测试和β测试及一系列的监控了。

总结

DevOps更多体现的是一种思路和流程,可能每个团队做法都不一样,例如,有的团队可能在Dev分支上测试,而在Master分支上构建生产环境镜像;有的团队可能因为环境隔离的原因,不得不部署多套Jenkins环境等,但归根结底目的是一样的,就是达到全程自动化,减少人力劳动(不知道算不算自己砸自己饭碗)以及各种人力,环境等因素导致出错的概率。

后续的文章我会按照这个思路展开,如果存在考虑不周,或者可以改进的地方,希望各位大佬们能够及时指出,大家一起探讨,共同进步!

最后,希望.Net生态越来越好!

DevOps系列(1)-总体架构的更多相关文章

  1. Java 集合系列 08 Map架构

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  2. Java 集合系列 02 Collection架构

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  3. Java 集合系列 01 总体框架

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  4. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) ...

  5. Java多线程(三) —— 线程并发库之总体架构

    对java并发库一直觉得很神秘,决定好好研究一下. 参考文献: https://blog.csdn.net/hp910315/article/details/50963095 http://www.b ...

  6. DevOps组织中应用架构师的新定位与实践

    [摘要] 针对应用架构师相关窘境,在现代化的应用开发中,DevOps组织需要定义应用架构师职责,使应用架构师与DevOps团队各角色更有效的沟通,交付更有价值的产品.在多数情况下,应用架构师不是Dev ...

  7. DevOps系列——Jenkins/Gitlab自动打包部署

    前面只说了DevOps的两个基础组件Jenkins和GitLab,客官也不要着急,我们玩就玩的深入一点,Gitlab和Jenkins的各种配置和 插件很多,也够啃一阵子的,不要照着操作一通就感觉万事大 ...

  8. [源码解析] 深度学习分布式训练框架 horovod (12) --- 弹性训练总体架构

    [源码解析] 深度学习分布式训练框架 horovod (12) --- 弹性训练总体架构 目录 [源码解析] 深度学习分布式训练框架 horovod (12) --- 弹性训练总体架构 0x00 摘要 ...

  9. [源码解析] 机器学习参数服务器 Paracel (1)-----总体架构

    [源码解析] 机器学习参数服务器 Paracel (1)-----总体架构 目录 [源码解析] 机器学习参数服务器 Paracel (1)-----总体架构 0x00 摘要 0x01使用 1.1 配置 ...

随机推荐

  1. Django学习路2

    1.导入 Django 工程时 在 manage.py 上一级目录导入 2.Add local 本地 Add Remote 远端 3.BASE_DIR 项目所在目录的绝对路径 4.SECRET_KEY ...

  2. Flask+微信公众号开发(接入指南)

    目录 一.注册公众号 二.启用开发者 三.配置服务器配置 四.开发自己的需求 五.写在最后 一.注册公众号 具体的注册过程,根据官方文档一步一步来即可.这里需注意的是订阅号还是服务号:有些比较好的开发 ...

  3. Python exec 内置语句

    描述 exec 执行储存在字符串或文件中的Python语句,相比于 eval,exec可以执行更复杂的 Python 代码.岭组词  https://www.cgewang.com/post/2205 ...

  4. 再见HTML ! 用纯Python就能写一个漂亮的网页

    我们在写一个网站或者一个网页界面的时候,需要学习很多东西,对小白来说很困难!比如我要做一个简单的网页交互: 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在 ...

  5. Linux学习笔记之ubuntu安装与配置

    1.打开虚拟机,点击新建虚拟机 2.安装向导 选择自定义安装 点击包含一个空白的硬盘 选择linux操作系统,版本是ubuntu 设置虚拟机的名称,可以自己写,还有保存的位置也可自选 根据自己电脑性能 ...

  6. PyTorch 学习

    PyTorch torch.autograd模块 深度学习的算法本质上是通过反向传播求导数, PyTorch的autograd模块实现了此功能, 在Tensor上的所有操作, autograd都会为它 ...

  7. django python manage.py runserver 流程

    python manage.py runserver 流程分析 版本 python27 django 1.0 搭建可运行的环境 创建python27 虚拟环境 github 下载 django-1.0 ...

  8. Python 面向对象之高级编程

    7.面向对象高级编程 7.1使用__slots__ python动态语言,new 对象后绑定属性和方法 Tip:给一个实例绑定的方法,对其他对象无效.可以通过对class绑定后,所有对象可以调用该方法 ...

  9. System.out.println()相关源码

    System.out.println是一个Java语句,一般情况下是将传递的参数,打印到控制台. System:是 java.lang包中的一个final类.根据javadoc,“java.lang. ...

  10. 全面介绍eBPF-概念

    全面介绍eBPF-概念 前面介绍了BCC可观测性和BCC网络,但对底层使用的eBPF的介绍相对较少,且官方欠缺对网络方面的介绍.下面对eBPF进行全面介绍. 目录 全面介绍eBPF-概念 BPF概述 ...