Search K
Appearance
Appearance
最近博主在用VuePress写文档,有一件事觉得特别麻烦,那就是写完部署的时候需要npm run build之后然后上传服务器。所以就有了Node去实现一个自动化部署的想法。
博主使用的是GitLab的WebHooks,Github的稍有不同,直接上代码:
const exec = require('child_process').exec
const express = require('express')
const app = express()
var nodemailer = require('nodemailer');
var transporter = nodemailer.createTransport({
service: 'qq',
auth: {
user: '1798231822@qq.com', //这里填自己的 qq号
pass: 'aedxgfhoixnscfgg' //授权码,通过QQ邮箱获取
}
});
var mailOptions = {
from: '1798231822@qq.com', // 发送者 asdfghj
to: ['1798231822@qq.com'], // 接受者,可以同时发送多个,以逗号隔开
subject: 'swan-doc部署结果', // 标题
text: '部署完成!' // 文本
};
let isLocking = false
app.post('/deploy/swan-docs', function (req, res) {
console.log("监听到推送操作============");
let headers = req.headers
let cmdStr = 'cd /usr/nginx-html/zhaochao/swan-docs/swan-docs && git pull origin master && npm run build'
console.log("准备部署===============");
if (!isLocking) {
console.log("开始部署=============");
isLocking = true
exec(cmdStr, function (err, stdout, stderr) {
if (err) {
console.log('部署失败:' + stderr);
} else {
console.log("监听到推送开始执行脚本");
console.log(stdout)
transporter.sendMail(mailOptions, function (err, info) {
if (err) {
console.log(err);
return;
}
console.log('发送成功');
res.send('发送成功');
});
isLocking = false
}
})
}else{
console.log("已存在部署任务==============");
}
// ......
})
app.listen(10002, '0.0.0.0', function () {
console.log(`listening on port 100002`)
})
Node依赖主要是Express和nodemailer,顺便加了一个邮件提醒部署完毕。