一个超级轻量,使用 Nodejs Ts 结合 github webhook 的自动化部署程序, 支持多项目、自定义脚本、部署队列、日志记录、飞书群消息推送。支持自定义拓展
- 克隆项目
git clone https://github.com/baohangxing/node-auto-deploy
- 修改基础配置
app.config.json 中配置 飞书机器人密钥 和 端口号
{
"feishuBot": "",
"listenPort": 8009,
"listenHost": "127.0.0.1"
}
在 deploy-list 和 shell 文件夹中配置自动化部署的项目以及自动化脚本
projectDir
为项目在服务器的位置
githubFullName
为项目的 github 的项目名, 支持多个
deploy-list 和 shell 文件夹中的文件名需要一致,不然会忽略
{
"projectDir": "/baohangxing/code/bhxya.com",
"githubFullName": "baohangxing/bhxya.com",
"description": "bhxya.com, blog"
}
服务开始后会将读取deploy-list下的所有的.json文件, 并找到对应的shell文件夹下的同名.sh作为部署脚本
会将项目路径作为第一个参数 shell 脚本, 脚本可以通过路径完成各种自定义的操作
-
使用 pm2 或其他守护进程管理器进行部署
-
在 github 上配置项目的 webhook, 以及修改想要的触发条件,当前条件是 refs/heads/main 分支上的 push 操作
项目的设计使用 hook 对自动化过程中的 开始 成功 失败进行各种自定配置 参考 app.js
对于所有任务的统一配置
const taskQueue = new TaskQueue();
taskQueue.init().then(() => {
taskQueue.tasksAddErrorHook((task: { name: string }, error: string) => {
Log.error(task.name, error);
});
});
对于单一任务的特殊配置
taskQueue.autoDeploy(queryData.repository.full_name, {
beforeHooks: [
function (task: { name: string }) {
const text = `项目:${task.name}\n提交人:${queryData.head_commit.author.username}\n提交信息:${queryData.head_commit.message}\n开始部署...\n`;
messagePush(text);
},
],
deploydHooks: [
function (task: { name: string }, timeCost: number) {
const text = `项目:${task.name}\n提交人:${queryData.head_commit.author.username}\n提交信息:${queryData.head_commit.message}\n状态:部署成功(${timeCost}s)\n`;
messagePush(text);
},
],
errorHooks: [
function (task: { name: string }, error: string) {
const text = `项目:${task.name}\n提交人:${queryData.head_commit.author.username}\n提交信息:${queryData.head_commit.message}\n状态:部署错误(${error})\n`;
messagePush(text);
},
],
});