Skip to content

Nodejs+WebHooks实现自动化部署

最近博主在用VuePress写文档,有一件事觉得特别麻烦,那就是写完部署的时候需要npm run build之后然后上传服务器。所以就有了Node去实现一个自动化部署的想法。

实现

博主使用的是GitLab的WebHooks,Github的稍有不同,直接上代码:

js
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,顺便加了一个邮件提醒部署完毕。

上次更新于: