1. 为什么我要弄这个?
emmmm,因为有个自己的项目每次发布到线上,都要登录一下服务器,然后pull一下代码,执行一些项目初始化的命令(诸如:git submoudle update,php artisan cache:clear,composer 之类)。感觉繁琐。
如果代码发布的时候,系统能把这些工作都自动搞掂就好了。所以就有了这个。
2. 环境准备
- github账号(这里用github做演示)
- node环境
- pm2
3. 大致流程描述
我们在 github 的项目上设置一个勾子。这个勾子有什么用呢?作用就是在我们 push 代码的时候,github 会触发这个勾子,向我们的服务器发起一个通知。然后我们在服务器收到这个通知,就执行咱们事先设定的命令脚本。至于服务器如何捕获到这个通知呢?我们服务器事先会开启一个服务,假如端口是 3000 的来监听这个通知。只要在设置勾子的时候往这个端口设置就行了。
4.搞起来
当你有了以上环境之后,就可以开搞了。
1. 新建一个项目 mkdir koa
2. 进入到该项目运行 npm install koa && npm install koa-bodyparser
3. 新建 index.js 和 run.sh 文件 并编辑以下代码
index.js
const Koa = require('koa'); const shell = require('child_process'); const app = new Koa(); const bodyParser = require('koa-bodyparser'); app.use(bodyParser()); app.use(async (ctx) => { if(ctx.url === '/' && ctx.method === 'POST'){ let postData = ctx.request.body; shell.execFile('./run.sh',function(error, stdout, stderr){ console.log('stdout: ' + stdout); console.log('error: ' + error); }); ctx.body = '执行成功'; }else{ ctx.body = '<h1>404<h1>'; } }); app.listen(3000, () => { console.log('http://127.0.0.1:3000'); });
run.sh
cd /home/www/你的项目 git reset --hard origin/master git pull git submodule update
4. 使用pm2进行进程管理 pm2 start index.js 然后运行 pm2 list 查看。
当你看到下面信息,就说明服务已经开启了。你可以访问一下对应端口,会得到一个404的提示页面。
如果过程出现错误,可以运行 pm2 logs 查看错误信息。更多pm2命令
5. github 项目的设置:前往你的 github 项目点击 Settings -> Webhooks 设置勾子。
Payload URL 填写刚刚开启的服务地址。
Content type 选择 x-www-form-urlencoded
Secret 随便设置一个就可以(这里我没弄验证)
结语
你往了项目push一下代码,就可以实现自动发布了.
© 著作权归作者所有
发表评论