扯闲淡

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

细算下来,到目前为止,我从事.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. 删除GIT中的.DS_Store

    转载自:https://www.jianshu.com/p/fdaa8be7f6c3 .DS_Store 是什么 使用 Mac 的用户可能会注意到,系统经常会自动在每个目录生成一个隐藏的 .DS_St ...

  2. JavaScript高级程序设计(第三版) 5/25

    第三章 基本概念 1.任何语言的核心都必然会描述这门语言最基本的工作原理.而描述的内容通常都要涉及这门语言的语法.操作符.数据类型.内置功能等用于构建复杂解决方案的基本概念. 2.浮点数值,该数值中必 ...

  3. 记一次使用commit提交大文件无法推送到远程库解决问题过程及git rebase使用

    记一次使用commit提交大文件无法推送到远程库解决问题过程及git rebase使用 目录 大文件无法push到远程仓库 问题 commit的大文件无法push到远程库解决办法 git filter ...

  4. 7.6 NOI模拟赛 灯 根号分治

    比较容易想的题目~ 容易发现 点亮一种颜色的贡献=新增灯的数量-已经存在的边的条数. 用线段树维护并不容易.暴力的话复杂度是\(Q\cdot n\)的. 考虑根号分治 只单纯考虑度数<B的点的话 ...

  5. Java并发学习(一):进程和线程

    好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 前言 俗话说得好"一人 ...

  6. SQL语句:在两个数据库间复制表结构和数据数据库

    一.如果两个数据库在同一台服务器上 1.复制表结构和数据:SELECT * INTO DatabaseB.dbo.TableB FROM DatabaseA.dbo.TableA 2.仅仅复制表结构: ...

  7. 036_go语言中的原子计数器

    代码演示 package main import ( "fmt" "runtime" "sync/atomic" "time&qu ...

  8. spring data jpa 代码生成!!(精华帖)

    通过数据库动态生成自己想要生成的各种模板,需要了解grovery. view -> Tool Windows -> Database + -> Data source -> M ...

  9. 9、Java 常用类 Math,Number子类,String,Character

    本小节主要介绍一些如何去使用Java提供的类如何去使用?如何在实战中使用?从来没有用过的如何去学习? 分享一下发哥的学习方法? 1.针对性的学习 在理解自己的需求或者要做某一块的内容后,有针对性,选择 ...

  10. OpenCV之高斯平滑(Python实现)

    假设一个列数为W,行数为H的高斯卷计算子gaussKernel,其中W,H均为奇数,描点位置在((H-1)/2 ,(W-1)/2),构建高斯卷积核的步骤如下 1.计算高斯矩阵 \[gaussMatri ...