使用webhook部署hexo博客

475 阅读2分钟

问题来源

  • 因为vps的网络环境无法保证,ssh上去打包部署的时候经常敲一下卡10s,着实难受;
  • 其实每次ssh只是为了使用hexo g生成页面,于是想办法避免频繁的ssh登录;
  • 本来想部署Jenkins,但是资源占用太高,小机器跑不了,最终选择了自定义webhook的方式;

配置webhook

  • 个人使用的仓库是bitbuket,支持webhook,在具体代码仓库的设置页面可以看到webhook的选项;
  • 只勾选push的时候触发,填写一个触发的地址;

触发构建

  • 后端方面使用了nodejs来开发,框架则使用比较熟悉的express;
  • 因博客只有自己一个访客,所以接口未做密码校验(具体路径保密~~);

app.js

app.use("/blog", function (req, res) {
    blog(function(err,result){
        if(err){
            res.send(err);
        }else{
            res.send(result);
        }
    });
});

blog.js

var execFile = require('child_process').execFile;
module.exports = function(callback){
    
    execFile("/home/wwwroot/project/webhook/lib/blog.sh", function(err, stdout, stderr) {
            callback(err,stdout);
    });
};

blog.sh

cd /home/wwwroot/project/blog
git checkout develop
git pull origin develop
#这里直接调用项目里的hexo,因为全局hexo不一定存在
/home/wwwroot/project/blog/node_modules/hexo/bin/hexo g
gulp
gulp minify
rm -fr /home/wwwroot/blog.loofahsf.com/public
cp -rf /home/wwwroot/project/blog/dist/public /home/wwwroot/blog.loofahsf.com/

问题记录

  • 测试的时候手动执行脚本,部署成功;结果发布到vps之后再调用api确报错了
# 错误信息
Error: spawn EACCES
    at exports._errnoException (util.js:911:11)
    at ChildProcess.spawn (internal/child_process.js:309:11)
    at exports.spawn (child_process.js:362:9)
    at exports.execFile (child_process.js:151:15)
    at module.exports (/home/wwwroot/project/webhook/src/blog.js:3:5)
    at /home/wwwroot/project/webhook/app.js:34:5
    at Layer.handle [as handle_request] (/home/wwwroot/project/webhook/node_modules/express/lib/router/layer.js:95:5)
    at next (/home/wwwroot/project/webhook/node_modules/express/lib/router/route.js:131:13)
    at Route.dispatch (/home/wwwroot/project/webhook/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/home/wwwroot/project/webhook/node_modules/express/lib/router/layer.js:95:5)
  • 发现是测试的时候手动给脚本加了x权限,提交的代码里边的.sh文件没有加x权限;
    于是本地执行 chmox +x blog.sh增加权限,然后push代码,再次测试,一切顺利!

本文使用 文章同步助手 同步 原文于2016-11-17发布在个人博客