因为MUD游戏经常更新,为此配置webhook实现自动部署。
虽然MUD带有·ed
·这个函数可以在线编辑代码,但是本人是强烈不推荐这种做法的,养成好的习惯是通过·git
·来管理项目,在本机编辑代码并测试通过后·git push
·上传到github或gitee,然后在服务器上通过·git pull
·更新游戏代码。
如果不方便或不想每次push代码后都到服务器上pull,可以通过git的webhook实现自动更新。
安装nodejs
在服务器上安装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系统
const sh = spawn('sh', ['./mymud/update.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系统
const bat = spawn('cmd.exe', ['/c', 'update.bat']);
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(7777)
示例代码中针对linux和windows的代码,请根据自己服务器的操作系统选择使用,调用的脚本update.sh
或update.bat
是更新MUDLIB的脚本。
其中linux
系统中直接调用脚本更新代码:
#!/bin/bash
cd mymud && git pull
而windows系统中则需要从update.bat
中做一些处理,如下示例,是通过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
运行服务,监听端口为7777,然后在github项目的settings
下WebHooks
中配置好监听地址即可。
如果是linux服务器,推荐使用pm2
运行服务,如果对pm2不熟悉,可以百度或安装后运行pm2 examples
查看示例说明。
npm i -g pm2
pm2 plus
pm2 webhook.js