利用git来做版本控制和团队协作开发是一个不错的选择,这里做一下记录。
实现原理
利用git的hook机制,当每次用户提交了代码后触发一个动作去请求我们自己的服务器,服务器收到通知后将代码重新拉取一下,实现代码的自动部署。
所需环境条件
- 本地安装
git
和SourceTree
客户端 - 服务端安装
git
和nodejs
环境以及PM2
管理器 - 注册码云账户
具体实现
- 在服务端创建一个站点,用来响应hook动作
在这个站点目录下用npm
安装koa
然后新建一个index.js
文件,和一个run.sh
文件
index.js
const Koa = require('koa');
const shell = require('child_process');
const app = new Koa();
app.use(async (ctx) => {
if(ctx.url === '/' && ctx.method === 'POST'){
let postData = await parsePostData(ctx);
if(postData.password=='定义你的密码'){
shell.execFile('./run.sh',function(error, stdout, stderr){
console.log('stdout: ' + stdout);
console.log('error: ' + error);
});
ctx.body = '执行成功';
}
}else{
ctx.body = '<h1>404<h1>';
}
function parsePostData() {
return new Promise((resolve, reject) => {
try {
let postData = '';
ctx.req.addListener('data', (data) => { // 有数据传入的时候
postData += data;
});
ctx.req.on('end', () => {
let parseData = JSON.parse(postData);
resolve(parseData);
});
} catch (e) {
reject(e);
}
});
}
});
app.listen(3000, () => {
console.log('http://127.0.0.1:3000');
});
run.sh
cd /www/wwwroot/www.XXXXXXXXXXX.com
git reset --hard origin/master
git pull
chmod -R 777 runtime
注意:目录的权限设置
目录截图
mulu.png这些都搞定之后,就在 PM2
中把入口文件 index.js
加进去
这样我们的响应程序就配置好了,接下来去码云创建一个仓库。
-
新建仓库,将仓库设置为私有,并添加开发者。
WX20190313-165848.png
然后去你的服务器上生成一个SSH公钥,添加到这里。
ssh-keygen -t rsa -C "邮箱地址"
三次回车后生成,然后用下面的命令查看
cat ~/.ssh/id_rsa.pub
WX20190313-170126.png
最后配置WebHooks,填写那个nodejs的站点地址
WX20190313-180239.png
-
再创建一个你项目的站点,在目录中用命令把仓库克隆下来。
注意:一定要用这个SSH的方式
WX20190313-182142.png
4.在本地用SourceTree
拉取仓库,修改一些文件,【提交】--> 【推送】
再回头去看你服务器上的站点,文件也跟着变动了。
网友评论