DevOps系列(1)-总体架构
扯闲淡
在进入正式话题之前,先扯个淡,这算是第一篇我正式在博客上发布的随笔吧,之前也一直有想写点什么,将自己多年的工作经验分享出来,供大家参考点评,但是奈何一直对自己的文字功底不自信(其实也确实比较烂,上学期间,语文永远是拖后腿的),当然,最主要还是因为自己的懒惰,导致一直没有付出行动。
细算下来,到目前为止,我从事.Net开发已经差不多八年了,也算是一只见证了.Net从兴起到衰落(不知道这么说会不会被打)再到逐渐有复苏迹象的老鸟了。在这个过程中,带过团队,也担任过架构师(当时为了证明自己并非野路子,2018年还专门拿下了软考《系统架构设计师》认证)。在企业内部Wiki上也写过不少文章,做过不少技术分享,但毕竟是小群体,文章写得再烂(甚至只有提纲,或者只字片语,或者只有一张图),也可以通过沟通解释清楚,就算真的写错了,也会有很多补救措施,不会产生什么不良影响。而对外发布,对内容的完整性,严谨性以及文字组织能力的要求就要高得多,而这正是我不得不花精力填补的短板。
2020年注定是不平凡的一年,对于我们这些.Neter来说更是如此,我不确定能否通过文字完整的出自己的思想,但是我会尽力,希望我的文字不会带偏你的思路,当然,如果你能赞同我的观点,并能从中得到一点点启发,那将是我莫大的荣幸。
好了,闲淡扯完了,进入今天的正题吧!
总体架构
在这里,我准备结合自己的工作经历和个人理解,针对当前比较火热的DevOps话题出一个文章系列。但是,在这之前,有必要从整体上梳理一下思路,圈定一下范围,以保证整体思想的一致,并方便后续文章的展开。
这个系列并没有涵盖DevOps的全部内容,例如,没有包含服务的链路追踪、日志监控、健康检查等微服务相关的部分,也没有包括集群和容器的监控、管理、健康检查、报警等更偏向运维的部分,而是更多的聚焦在CI/CD上。微服务相关的部分后面可能单会独写一个系列详细探讨,而运维相关部分则不会过多涉及,即使是K8S容器编排也只会点到为止,因为这部分我自己接触的也比较少,不敢瞎写。
概览

注意,这里的Jenkins并非部署了多套,而是在同一套Jenkins中根据部署环境的不同划分了多个分组,每个分组有各自不同的权限和功能。
流程说明
- 开发人员每次写完代码之后,Push到源代码仓库(企业中一定会有自己SVN或者Git等私有仓库,这是即使没有DevOps或CI/CD概念也会存在的最基本的基础设施,我后续会直接使用GitHub,因此不会单独介绍这部分内容),自动(或者定时轮询)触发Jenkins构建,完成Nuget包还原,静态代码审查,单元测试,上传报告到SonarQube服务器,如果构建失败,或者代码审查和单元测试报告不达标(实际工作中,由于各种原因,这个目标比较难以达到),则反馈开发修复,如果达标则构建镜像并发布到开发环境的Docker容器中;
- 开发人员功能开发完成,并通过开发环境容器测试通过后,将Dev分支合并到Master分支,并发送提测通知到测试人员;
- 测试人员(可以在分支合并的时候自动触发,或者定时轮询)构建Master分支,大体流程跟开发分支相同,不同点就是会发布到尽量贴近生产环境的Docker集群,同时将镜像Push到Harbor镜像仓库;
- 测试人员测试通过后,通知运维人员安排上线;
- 运维人员通过手动触发Jenkins的方式,先从Harbor上Pull对应版本的镜像,并逐步分阶段完成到生产环境Docker集群的部署。
- 剩下的就是生产环境α测试和β测试及一系列的监控了。
总结
DevOps更多体现的是一种思路和流程,可能每个团队做法都不一样,例如,有的团队可能在Dev分支上测试,而在Master分支上构建生产环境镜像;有的团队可能因为环境隔离的原因,不得不部署多套Jenkins环境等,但归根结底目的是一样的,就是达到全程自动化,减少人力劳动(不知道算不算自己砸自己饭碗)以及各种人力,环境等因素导致出错的概率。
后续的文章我会按照这个思路展开,如果存在考虑不周,或者可以改进的地方,希望各位大佬们能够及时指出,大家一起探讨,共同进步!
最后,希望.Net生态越来越好!
DevOps系列(1)-总体架构的更多相关文章
- Java 集合系列 08 Map架构
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- Java 集合系列 02 Collection架构
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- Java 集合系列 01 总体框架
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) ...
- Java多线程(三) —— 线程并发库之总体架构
对java并发库一直觉得很神秘,决定好好研究一下. 参考文献: https://blog.csdn.net/hp910315/article/details/50963095 http://www.b ...
- DevOps组织中应用架构师的新定位与实践
[摘要] 针对应用架构师相关窘境,在现代化的应用开发中,DevOps组织需要定义应用架构师职责,使应用架构师与DevOps团队各角色更有效的沟通,交付更有价值的产品.在多数情况下,应用架构师不是Dev ...
- DevOps系列——Jenkins/Gitlab自动打包部署
前面只说了DevOps的两个基础组件Jenkins和GitLab,客官也不要着急,我们玩就玩的深入一点,Gitlab和Jenkins的各种配置和 插件很多,也够啃一阵子的,不要照着操作一通就感觉万事大 ...
- [源码解析] 深度学习分布式训练框架 horovod (12) --- 弹性训练总体架构
[源码解析] 深度学习分布式训练框架 horovod (12) --- 弹性训练总体架构 目录 [源码解析] 深度学习分布式训练框架 horovod (12) --- 弹性训练总体架构 0x00 摘要 ...
- [源码解析] 机器学习参数服务器 Paracel (1)-----总体架构
[源码解析] 机器学习参数服务器 Paracel (1)-----总体架构 目录 [源码解析] 机器学习参数服务器 Paracel (1)-----总体架构 0x00 摘要 0x01使用 1.1 配置 ...
随机推荐
- Python打印到屏幕_读取键盘输入
Python打印到屏幕_读取键盘输入: print( ): 打印输出括号中的值 print("hello") # hello strs = 'hello' print(" ...
- Python定位模块_PYTHONPATH变量
Python定位模块: 导入模块时,系统会根据搜索路径进行寻找模块: 1.在程序当前目录下寻找该模块 2.在环境变量 PYTHONPATH 中指定的路径列表寻找 3.在 Python 安装路径中寻找 ...
- PHP array_walk_recursive() 函数
实例 对数组中的每个元素应用用户自定义函数: <?phpfunction myfunction($value,$key){echo "The key $key has the valu ...
- PDOStatement::columnCount
PDOStatement::columnCount — 返回结果集中的列数.(PHP 5 >= 5.1.0, PECL pdo >= 0.2.0) 说明 语法 int PDOStateme ...
- MOS 预夹断到底是什么
https://www.cnblogs.com/yeungchie/ MOS管就像一个开关,栅极(Gate)决定源极(Souce)到漏极(Drain)的沟道(Channel)是开还是关.以NMOS为例 ...
- Blob分析之board.hdev
* board.hdev: Detection of missing solder* 获取当前系统参数get_system ('clip_region', Information)*设置当前系统参数s ...
- 一本通 高手训练 1781 死亡之树 状态压缩dp
LINK:死亡之树 关于去重 还是有讲究的. 题目求本质不同的 具有k个叶子节点的树的个数 不能上矩阵树. 点数很少容易想到装压dp 考虑如何刻画树的形状 发现一个维度做不了 所以. 设状态 f[i] ...
- UOJ #22 UR #1 外星人
LINK:#22. UR #1 外星人 给出n个正整数数 一个初值x x要逐个对这些数字取模 问怎样排列使得最终结果最大 使结果最大的方案数又多少种? n<=1000,x<=5000. 考 ...
- Idea风格的快捷键
在使用IntelliJ IDEA时,是可以定义快捷键风格的:File --> Setting --> Keymap 里进行选择,因为我以前用Eclipse开发,后来换成Idea有2年的时间 ...
- demo1 动态显示view或弹框 动态隐藏view或弹框
实现界面如上所示: 有一个弹框,弹框上边有一个关闭按钮,点击按钮,可以关闭弹框.点击弹框的周围区域也可以关闭按钮. 点击上边的隐藏弹框也可以关闭按钮. 在实现功能的基础上,以动画的形式展示跟隐藏. 思 ...