虽然MUD带有·ed·这个函数可以在线编辑代码,但是本人是强烈不推荐这种做法的,养成好的习惯是通过·git·来管理项目,在本机编辑代码并测试通过后·git push·上传到github或gitee,然后在服务器上通过·git pull·更新游戏代码。
如果不方便或不想每次push代码后都到服务器上pull,可以通过git的webhook实现自动更新。
最新Webhook项目代码:https://gitee.com/oiuv/webhook
安装nodejs
在服务器上安装nodejs,这个网站有大量的教程,这里不再重复。
# windows
choco install nvs
# Ubuntu
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - &&\
sudo apt-get install -y nodejs
开启webhook服务
我们写一个脚本·webhook.js·,代码如下:
const http = require('http');
const { spawn } = require('child_process') // 子进程, 用来执行脚本
http.createServer((req, res) => {
console.log(`--- ${req.method} --- ${req.url} ---`);
// console.log(`--- headers : ${JSON.stringify(req.headers)} ---`)
// console.log(`--- ${JSON.stringify(req.trailers)} ---`)
res.setHeader("Content-Type", "application/json");
// request
if (req.method === 'POST') {
// 获取body
let body = '';
req.on('data', (data) => {
// console.log(`--- data: ${data} ---`);
body += data;
});
req.on('end', () => {
let payload = JSON.parse(body);
console.log(`--- ${payload.repository.url} ---`);
//* linux和macOS
if (process.platform === 'linux' || process.platform === 'darwin') {
const sh = spawn('sh', [`./sh/${payload.repository.name}.sh`]);
sh.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
sh.stdout.on('end', () => {
console.log('Mission Complete!')
});
sh.stderr.on('data', (data) => {
console.error(`stderr: ${data}`);
});
sh.on('close', (code) => {
console.log(`child process exited with code ${code}`);
});
}
//* windows系统
if (process.platform === 'win32') {
const bat = spawn('cmd.exe', ['/c', `bat\\${payload.repository.name}.cmd`]);
bat.stdout.on('data', (data) => {
console.log(data.toString());
});
bat.stdout.on('end', () => {
console.log('Mission Complete!')
});
bat.stderr.on('data', (data) => {
console.error(data.toString());
});
bat.on('exit', (code) => {
console.log(`Child exited with code ${code}`);
});
}
// response
let json = JSON.stringify({
status: "success",
code: 200
});
res.end(json);
});
}
else {
let json = JSON.stringify({
status: "OK",
code: 200
});
res.end(json);
}
}).listen(8008)
默认监听端口8008,支持linux和windows,请根据自己服务器的操作系统选择使用,调用的脚本*.sh或*.bat是更新MUDLIB的脚本,默认和你git仓库同名。
其中linux系统中直接调用脚本更新代码:
#!/bin/bash
cd mymud && git pull
而windows系统中则需要从xxx.bat中做处理,使用bat文件调用和linux系统一直都sh文件。如下示例,是通过git提供的bash.exe执行update.sh脚本:
@echo off
echo --- Git-Bash ---
C:
chdir C:\Program Files\Git\bin
bash --login -i /d/WebHooks/update.sh
这里/d/WebHooks/update.sh是·git-bash中的路径,对应电脑·D:\WebHooks\update.sh·脚本,update.sh中也要使用绝对路径进入mudlib目录:
#!/bin/bash
cd /c/MyMud && git pull
示例中·/c/MyMud·是电脑上C:\MyMud目录。
如果电脑上有安装Cygwin,也可以直接使用Cygwin终端:
@echo off
echo --- Cygwin-Terminal ---
C:
chdir C:\cygwin64\bin
bash --login -i ./update.sh
这个update.sh文件位置放在Cygwin的~目录中,脚本写法则和linux系统下一样。
配置好脚本后,使用node webhook.js运行服务,监听端口为8008,输入http://你的服务器IP:8008看能否正常响应,没问题后我们在github项目的settings下WebHooks中配置这个监听地址即可生效了。
提示:对webhook.js服务推荐使用pm2运行管理,如果对pm2不熟悉,可以百度或安装后运行pm2 examples查看示例说明。
npm i -g pm2
pm2 plus
pm2 start webhook.js