自动化部署优化

现在我正在做的项目使用了 webhook 进行自动化部署,每当 testing 分支有 push 或者 merger request 被合并进去,就会触发我们的自动化部署。
大体实现就是通过 gitlab 提供的 webhook 服务,配置下监听 push 或者 merge request 事件的 url(一个服务地址), 由于 merge request 分为三种状态 created/updated/merged ,我们只在 merged 时进行自动化部署。当收到 gitlab 发来的请求,我们会在测试云主机开启服务进行接收处理,进行一些请求校验后进行打包、部署。打包是基于我们在测试云主机上有当前项目的 git 仓库,打包时会重新拉下最新的代码,之后进行打包操作。

但是公司的项目是部署在私有的 gitlab 上,这就需要连接 vpn 访问项目地址。为了安全问题,没三个月必须更换下自己的密码,经常会出现更换了密码忘记去机器上更换的情况,导致合并 mr 后没有进行自动化部署,错过了一次 webhook 请求,只有手动去打包部署了,最主要是合并 mr 之后以为已经正常部署了,等到发现出错了已经是好几个小时之后了。。。
发现这个小问题后,我优化了下之前的代码,将我们的 vpn 用户名和密码通过一个文件进行维护,大体类似这样

1
2
3
4
5
6
7
// vpn_account_config.js

module.exports = [
[userName, passwd],
[userName1, passwd1],
[userName2, passwd2],
];

由于换密码通常也就固定的几个密码进行切换,所以这个数组元素也不会很多。
当收到 webhook 请求,并且校验通过后,我先进行一下 checkVpn 操作,具体实现就是使用了 node 的 dns 模块,查找我们 gitlab 域名对应的 ip,查找失败,就在日志里提示“未配置 host”,查找到后使用第三方的 “net-ping”进行ping ip操作,ping 成功后执行与之前相同的逻辑,失败后进行 changePasswd,从我们维护的账号密码数组里(vpn_account_config.js)按顺序取出一组,写到 passwd.txt(vpn 连接时的账号文件),如果取出的这组 passwd.txt 已经存在,则跳过继续取下一组写入到文件,写入完成后重启 vpn,继续进行checkVpn 操作,循环往复,直到连接成功或者维护的账号密码都无法连接成功后退出。连接成功则进行进行之前的逻辑(打包、部署等),失败则进行提示“需要手动更换密码连接 vpn”。