技术应用场景
自己有一个小的技术博客,部分代码用github托管, 含有隐私信息的代码采用了ftp上传绕过托管。当然更好的方式是自己搭建一个gitlab服务器。代码部署在自己的服务器上面,每次提交完代码都要去服务器上面更新代码是一件很低效的事。说以想通通过一个性价比很高的方式实现如上需求。
原理
- 配置GitHub当push master上代码的时候,访问自己服务器上的一个api(webhooks),假如叫https://xxx.com/api/webhook。
https://xxx.com/ - api里写着这样的逻辑,拉取代码(
git fetch
), 合并代码(git merge
)。 自己玩也就没有做打标签。 - 代码拉取,合并完毕,重启服务端的服务,我是用了pm2做进程管理,所以再执行
pm2 restart name
就好。
原理很简单,就是当向github里push master代码的时候,github调用服务器的api,服务器拉取,合并代码,然后重启网站服务。
github配置
- 进入对应的仓库
- 点击settings
- 点击Webhooks
- add webhooks
- Payload URL 里添加好我们自己服务器的完整api url。
- Which events would you like to trigger this webhook? 选Just the push event.就好。
服务端代码(node.js)
1 | //这里使用了shelljs模块,实现js和linux的交互。 |
- 这里我做了当服务器完成代码拉取,合并后就钉钉推送的操作。
- 但无论我用shelljs的回调还是通过async/await改异步为同步都不行代码都不能正常运行。(想拿到shelljs执行linux命令返回的信息,再钉钉通知,方便知晓是否成功)
- 这里我做了个调整,api的第一步是做钉钉通知,后面在做拉取,合并操作。
- 这样操作注意访问线上代码是否生效。
这里我只是满足,我自己的一台服务器的提效需求。而且还有一些安全问题目前还没有进一步完善。哪些问题呢?
- 如果有多台服务器怎么操作? (发布机)
- 其他人知道我的跟新api url怎么办?(代码执行用户,文件权限,访问的ip限制)
目前博客主要是满足自己提升需求,遭受攻击的风险还小,未做更多的安全操作。