使用node执行shell脚本设置一键更新gitbook当github push

gitbook更新问题

使用gitbook上传到github pages设置上传即更新

然而github只有公共库可以设置pages,私人仓库是不可以设置的.

➢ 云服务器部署

更新gitbookgithub后,仍然需要手动更新一次云服务器git

使用ssh远程到云服务器,不仅繁琐,还容易出错(项目比较多的话)

➢ 两种更新方案

有一种方案是github利用webhook实现push时项目自动部署

另一种方案是在node中使用shell脚本(这里采用访问某特定API的形式)

shell脚本

文件名test.sh

更新git仓库

#!/bin/sh
git pull
node执行系统命令

node中设置子进程执行系统命令

以下是express+node当访问/shell api的时候,执行shell脚本

// api设置
router.get(`/shell`, function(req, res) {
    // 子进程
    var exec = require("child_process").exec;
    //需要执行的命令字符串
    var cli = "sh ./shell/test.sh";
    // 执行命令
    exec(cli, { encoding: "utf8" }, function(err, stdout, stderr) {
        // 如果抛出错误
        if (err) {
            console.log(`err`, err);
            // 返回结果
            res.send({
                code: -1,
                data: `一些错误`,
                msg: err
            });
            return;
        }
        // 如果没有错误,则执行命令成功
        console.log("stdout >>>>>>>>>>>>> " + stdout);
        console.log("stderr >>>>>>>>>>>>> " + stderr);
        // 返回结果
        res.send({
            code: 0,
            data: `更新成功`,
            msg: `
            ${stdout}
            >>>>>
            ${stderr}
            `
        });
    });
});
Tips

由于使用express+node返回静态Html,所以shell只是拉去最新的静态资源,网站就会更新.

如果设置到服务端的修改,那么还要加上pm2等指令,比如pm2 restart server.js

前置条件:linux服务器上设置了git令牌,不需要通过https或者ssh密码的形式pull