CMDB发布平台是ezbuy的一个发布管理平台,包含了go的发布,windows serices发布,iis发布,memcache管理,svn管理,资产信息管理操作。
随着公司的业务发展,公司go的服务有100多个单实例,如果多机部署计算,是成倍数增长的,而且每天更新发布的频率高,所以如果人为的去发布,会出现以下问题:
- 开发人员每次update服务,都需要找运维人员发布
- 每次发布,没有版本信息记载,只有相应的版本号,即没有历史数据
- 重复工作量大,无技术可言,且容易人为发布错误
- 没有消息通知
- 开发人员各自在自己电脑上编译,然后提交到svn(环境不统一)
go现在的发布是每次jenkis自动编译通过后,自动上传到svn上,避免编译成mac os版本的go上传到svn,然后通过CMDB平台发布,发布涉及手动和自动发布两个操作:
- 手动:开发人员手动通过CMDB平台发布
- 自动:编译好后,jenkis直接调用CMDB API自动发布到线上(持续CD)
综上问题,CMDB开发了go发布管理模块,模块里包含以下功能:
- 部署
- 发布
- 更新go配置文件
- 重启go服务
- 版本回滚
- go服务状态
- go crontab发布更新
- go cron job定时任务列表
[部署]:
线上运维人员可以通过运维平台直接部署一个新的go服务
go部署
[发布]:
开发人员有权限直接发布服务到线上,无需运维人员干预,且每次发布要填入相应的tower发布url,否则不给予发布
go发布
不管服务成功与否,CMDB会调用钉钉api,将发布结果发送到钉钉消息群,同时CMDB也会保存一份日志到数据库。
go发布消息
[更新go配置文件]:
go配置文件我们会单独的将所有go实例的配置文件保存在一个svn库,这样的好处是,有版本控制,避免开发人员人为改动,且敏感信息只有相应权限的人才能查看,所以每次配置文件改表,直接相应有权限的人提交到svn,通过更新go配置文件下发的所有主机:
go下发配置文件
[版本回滚]:
线上运维同学可以通过CMDB平台回滚到相应的版本
[服务状态]:
开发人员可以实时查看go服务运行的状态
[go crontab更新]:
开发人员可以直接发布go的服务
[cron job列表]:
可以在CMDB平台查看所有的cron job和cron job上次执行的时间
最后,我们将会把go的配置文件统一线上线下环境一样,且不暴露敏感信息,敬请关注下一篇《如何利用consul-template保持线上线下配置文件一致》