node后台
项目目录
app.js
这里需要一个child_process模块来帮助读取shell脚本
var http = require('http')
var process = require('child_process');
const fs = require('fs');
let options = {
flags: 'a', //
encoding: 'utf8', // utf8编码
}
let stderr = fs.createWriteStream('./a.log', options);
// 创建logger
let logger = new console.Console(stderr);
http.createServer(function (req, res) {
// 这里只是简单判断了 请求事件为Push Hook, x-gitee-token 在这里对应的是你git上配置webhook的密码
if (req.headers['x-gitee-event'] === 'Push Hook' && req.headers['x-gitee-token'] === 'wobuzhidao') {
logger.log('start build')
// 读取shell脚本
process.exec(__dirname +'/auto_build.sh', function (err, sto) {
logger.log('部署成功', sto);
})
}else {
logger.log('非法访问')
}
}).listen(7777,()=> { logger.log('开始监听github webhook')})
这个7777端口记得开反向代理
autu_build.sh
#!/bin/bash
echo ""
#输出当前时间
date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"
echo "Start"
#git项目路径
gitPath="你的前端存放服务器目录"
#git 网址
gitHttp="你的前端git地址"
echo "Web站点路径:$gitPath"
error_exit() {
echo "经过了判断 $1"
echo "$1" 1>&2
exit 1
}
#判断项目路径是否存在
if [ -d "$gitPath" ]; then
cd $gitPath
if [ ! -d ".git" ]; then
echo "在该目录下克隆 git"
git clone $gitHttp gittemp
mv gittemp/.git .
rm -rf gittemp
fi
#拉取最新的项目文件
git reset --hard origin/master
git pull
npm install || error_exit "下载包失败"
npm run build || error_exit "打包失败"
echo "End"
exit
else
echo "该项目路径不存在"
echo "End"
exit
fi
把这个后台项目放到服务器上用pm2启动app.js
如果报git权限问题,请教了后台 执行了 好像是更改权限为777的意思
chmod -R 777 /www/wwwroot
如果fatal: could not read Username for ‘https://gitee.com’: No such device or address的话,就把你的git地址 修改为
https://[userName]:[password]@gitee.com/[username]/xxx.git
配置码云webhook
这里的url 就是你node服务跑的那个域名
这里的密码对于的是node服务app.js里面解析的header里面的x-gitee-token