公司自动部署系统建设
刚来到公司的时候,由于没有自动部署系统,导致每次提交完代码后都得手动scp到相应的服务器上,费时费力,还容易出错。于是,我便着手打造一套公司专用的内部部署系统。 最开始的构想是使用drone配合gogs来完成一套部署系统,方便且功能强大。但实践的时候却由于drone文档不全,服务器空间不足(无法安装docker),git服务器配置差等因素被迫中止。 最后在结合实际情况考虑之后,打算自建部署服务器,通过git hooks与node server构建一套部署系统。 结构图如下 首先是搭建node server,我采用express+ ts-express-decorators 的一个组合, ts-express-decorators 使用大量装饰器取代了wrapper,使代码趋于整洁美观并提高了维护性与复用率。后端框架完成之后,便要考虑如何执行shell,这里我使用了shelljs(主要是对于child-process的一层封装),借助其强大的api,可以方便的执行各种shell命令。 为了方便进程管理,我使用了pm2作为进程管理工具,并采用 pm2-web 进行相关进程的监控(不用进服务器查询进程信息了)。 对于要使用自动部署的项目,只需在项目更目录下加上deploy.json(记录了要部署的服务器等信息)与deploy.sh(自动部署时要执行的脚本,如项目构建等)即可完成相应自动部署任务。 遇到的问题: 1.scp与git的权限问题:通过ssh-keygen生成rsa证书可以解决 2.git脚本执行情况反馈:在执行git hooks的时候,发布代码的控制台会打印相关信息