上一篇文章《记一次诡异的故障排查经历》中有介绍到我们的部署程序varian,文章发布后有小伙伴对varian很感兴趣,今天就简单的介绍一下我们的varian,揭开她神秘的面纱~

什么是varian

varian是我们基于Python3编写的一套部署程序,处在整个部署系统的中心,与CMDB、Jenkins、SVN/Git、镜像仓库Harbor、Kubernetes API、通知系统等都有交互,负责将源代码经过一系列的处理后打包成Docker镜像,并发布到各个环境,然后通知相关人员。简化后的varian架构如下:

项目环境介绍

  • 项目数量:50+
  • 开发语言:php、java、nodejs
  • 代码版本管理工具:svn、git
  • 编译方式:maven、grunt、yarn
  • 通知方式:email、sms、im

varian能解决我们哪些问题

说到解决的问题,要先聊一下部署系统经历的几个迭代版本:

  1. 最早项目比较少,所用架构及技术也比较单一,每个项目都单独维护了一个shell脚本做部署,脚本里配置了项目的所有信息,包含服务器列表、代码路径等项目特有信息和通知类型等公共信息,各项目脚本之间互不干涉。这样做的好处是每个项目部署发布逻辑都比较简单,修改任何一个项目都对其他项目无影响;但缺点也很明显,各个项目脚本分散,任何项目信息变更都需要取改这个脚本,且一些公共功能的修改就需要所有项目脚本都改一遍,难免不出问题。

  2. 后来随着项目、服务器数量的增多,引入了CMDB来管理项目和主机的基本信息,纯shell的脚本也升级为了python+shell的脚本来维护编译部署,把一部分公共模块例如去CMDB拉取项目下的主机列表、邮件通知等从shell脚本中单独抽出来用python重构,并用python实现了一个主入口,所有项目部署都通过这个主入口进入,然后调用python或shell脚本来实现部署发布整过程,这样解决了脚本分散和公共模块更新所有项目脚本都要跟着修改的问题,但是添加一个新项目还是要手动更新一堆的脚本文件,效率低且易出错,各个项目处理逻辑各不相同,对需要熟悉她的新人很不友好。

  3. 现在线上项目数量已经超过50+,且还在不断增多,微服务、容器化等新技术也不断加入,每天进行数十上百次的部署更新,对部署系统的健壮性,扩展性有了更高的要求。基于之前一步步的探索,采用微服务的设计理念,我们实现了现在这一套部署程序varian,效率高、易扩展、出错率大大降低且对新人友好,解决了以上遇到的所有问题。

varian究竟长何种模样

说了这么多,那varian究竟是个什么样子呢?

设计思路

Lego积木,就是那种各个不同的小模块能拼装成各种各样的建筑的玩具。设计的思路也主要采用了lego的方式,把所有的功能都拆分成一个一个的python类,部署项目时就组装不同的类,例如一个最简单的纯静态web项目,组装了“拉代码模块”+“JS/CSS合并压缩模块”+“分发API模块”+“邮件通知模块”,如果是一个纯java api项目呢?组装“拉代码模块”+“maven编译模块”+“分发API模块”+“邮件通知模块”即可,从上边的例子可以就可以看出这种组装模块的优势。

所有模块可复用,来了一个新项目根据项目架构、开发语言等因素去判断目前的模块是否能够满足,如果可以满足就直接组装使用吧,如果确认过眼神,实在满足不了呢?那就新加一个模块,模块编写遵循简单可复用原则,需考虑到后续有类似功能可以直接使用此模块。

可能会有疑问?那些各个项目不同的配置怎么办?例如代码路径。这里采用了逻辑(模块)跟配置拆分的设计方式,所有处理逻辑不涉及任何一个项目特有的属性,项目特有的属性都单独配置,我们采用CMDB来配置,CMDB里有一张deploy的表,表关联project,记录了项目的特殊属性,例如通知邮件列表等等,逻辑模块会调用CMDB API自动取出所需配置信息。

实现方法

防爬虫,详细内容请关注微信公众号【运维咖啡吧】查看

使用方法

  • 控制台使用:
python main.py static qa 1 3 6 8# 第一个参数为项目名
# 第二个参数为部署环境
# 后边的参数就是要构建的模块组合
  • Jenkins使用:

只需要将控制台命令贴到jenkins的构建步骤中当做shell执行即可

总结

  1. 简单即是美
  2. 适合自己的就是最好的

探秘varian:优雅的发布部署程序相关推荐

  1. 微信小程序详细图文教程-10分钟完成微信小程序开发部署发布 小程序趟过的坑,你遇到几个??

    很多朋友都认为微信小程序申请.部署.发布很难,需要很长时间. 实际上,微信和腾讯云同是腾讯产品,已经提供了10分钟(根据准备资源情况,已完成小程序申请认证)完成小程序开发.部署.发布的方式.当然,实现 ...

  2. Windows Server 2008 RemoteApp(四)---发布应用程序

    本章节一起来体验RemoteApp应用程序发布功能,本功能利用了微软应用程序虚拟化技术,打个比方,我这台电脑上并没有安装Excel2010,但我现再要用Excel2010该怎么办?难道去找Office ...

  3. 发布dotNetCore程序到Kubernetes

    上一篇<Mac中搭建Kubernetes>介绍了怎样在Mac中搭建单节点的Kubernetes,本文将编写一个dotNetCore的示例程序,并发布到Kubernetes中. 环境 基本步 ...

  4. ASP.NET Core 2.0 MVC 发布部署--------- ASP.NET Core 发布的具体操作

    ASP.NET Core 发布的具体操作 下面使用C# 编写的ASP.NET Core Web项目示例说明发布的全过程. 1.创建项目 选择"文件" > "新建&q ...

  5. 友盟+发布小程序统计分析工具U-MiniProgram

    8月6日,在友盟+小程序数据峰会暨新品发布会上,友盟+免费的全平台跨域小程序统计分析产品-U-MiniProgram重磅面世.疫情来临,各个行业的企业纷纷开启自救模式,通过线上数字化的方式主动改变原有 ...

  6. windows下发布Qt程序

    From: http://hi.baidu.com/limingfantasy/blog/item/22f6c459b8720086810a182e.html windows下发布Qt程序 2008- ...

  7. 一个使用k8s发布应用程序的简单实例

    使用k8s发布我们的应用程序大概有如下几步 1.打包应用服务 2.根据应用服务创建镜像 3.将打包的镜像推送到我们创建的docker私服 4.在k8s的Master节点编写yaml文件 5.根据yam ...

  8. 麒麟系统开发笔记(八):在国产麒麟系统上使用linuxdeployqt发布qt程序

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/127484901 红胖子(红模仿)的博文大全:开发技术集 ...

  9. 架构师实战培训(架构设计+数据后台+快速开发+二次开发+发布部署)

    架构师实战培训(架构设计+数据后台+快速开发+二次开发+发布部署)系列视频课程 课程目标 学习MIS系统.高并发系统.单机系统设计思路: 理解设计模式,学会命令模式: 适用人群 CIO.CTO.技术总 ...

最新文章

  1. linux dma拷贝数据到用户态,图解:零拷贝Zero-Copy技术大揭秘
  2. c语言readdir函数功能,C语言readdir()函数:读取目录函数
  3. JBox2D和JavaFX:事件与力量
  4. 语义分割中的类别不平衡的权重计算
  5. 让其他CMS黯然失色的we7CMS
  6. 基于JAVA+SpringMVC+MYSQL的城市公交查询系统
  7. Mysql utf8 和utf8mb4 的区别
  8. Kinect 开发 —— 近距离探测
  9. Xilinx Artix-7 Aurora调试过程中遇到的问题
  10. MongoDB自定义函数部分 定义及引用
  11. 微信团购小程序怎么做?一般要多少钱?
  12. 【转存】游戏中常用术语
  13. 专业卸载工具Your Uninstaller! Pro
  14. Exception in thread “main“ java.lang.ArithmeticException: / by zero
  15. 黑猫带你学eMMC协议第1篇:全网最全emmc协议中文详讲,这份学习框架图,你值得拥有!!!(持续更新中...)
  16. linux命令vi编辑文件注释掉某一行,请问linux的vi命令进入文本编辑后怎么去删除一行?...
  17. 三十二个vbs整蛊代码,快去发给你的好朋友
  18. 华为超越三星拿下第一!2019年全球5G手机出货量榜单揭晓
  19. easyui datagrid-detailview 嵌套高度自适应
  20. python 日历壁纸_Excel+Python=精美DIY壁纸日历

热门文章

  1. AWS 中文入门开发教学 21- 通过 Web 应用连接到 MySQL 数据库服务器
  2. MySQL索引优化二
  3. centos7配置(nvidia+cuda+cudnn+anaconda+tensorflow)gpu开发环境
  4. 2021年bilibili程序员节日
  5. 使用moviepy快速剪辑和拼接视频
  6. xx-Pixiv Spider
  7. 【asp.net core 系列】5 布局页和静态资源
  8. vba控制图表,excel图表,一键完成
  9. 关于“前台根据后台值,操作字段、显示或select选中状态”的几种做法
  10. 如何在Windows版iTunes中播放Ogg音乐文件