写个 Webhook 去构建文档

栏目: Lua · 发布时间: 6年前

内容简介:写个 Webhook 去构建文档

最近写了一个 破开源项目 ,在写它的文档的时候,突然想用 rst 和 Sphinx,主要是感觉这个比较好用,写起来比 Markdown 要强大太多。于是,就遇到了文档部署的问题。

首先是文档放在哪里,第一时间想到的自然是 Github Pages,但是我这个破文档用的是 Sphinx,自然就没法直接用 Jeklly 和 Markdown 让 Github 去自动构建,必须得用静态资源形式。也就意味着,我每次提交,都得手动将生成的文档文件,要么是 Push 到我 master 分支下的 docs 目录,要么是 gh-pages 分支。

像我这种懒人,写文档都很懒了,自然是不愿意做这种重复工作。换言之,我能写文档都很不容易了。这东西不自动化怎么行。于是,Github Pages 方案第一时间 Pass。

接下来,我找到了大名鼎鼎的文档部署站 RTD ,它能关联我的项目,基于 Github Webhook 自动触发构建,还能生成漂亮的文档,一切都很满意。但是,因为是免费服务,所以生成的文档都自带广告。而且,绑定域名的时候,我郁闷地发现,它没法绑定 HTTPS 域名。我的域名加入了 HSTS Preload List,所以所有的浏览器访问我的域名都会默认走 HTTPS。

得,要不我自己部署一个 rtd?于是我找到了它的 开源仓库地址 ,看了看它的部署文档,我选择放弃,需要的东西太多,而且将这个一套文档库暴露在网站,难免不被人滥用,还无法保证安全性。

选来选去,我决定干脆自己写一个吧。

需求如下:

  1. 暴露一个地址,能 HTTP 方式访问。
  2. 访问该地址之后,能自动触发文档构建。
  3. 能将构建好的文档部署到我的服务器上。

一开始我想基于 Openresty 来写,直接 access_by_lua 然后里面 os.execute 指定 shell 即可。然后我悲剧地发现,我升级到了最新的 Openresty,春哥已经废弃了 Lua API,改用纯 LuaJIT。 亚麻

退而求其次,改用 Nodejs。搜了搜发现,Nodejs 的 require('child_process').spawn 可以去执行 shell 文件,于是一个大胆的方案出来啦。

const spawn = require('child_process').spawn;
const http = require('http');

const srv = http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'application/json'});
  res.end('{success: true}');
  build_doc();
});

srv.listen(2800);

function build_doc() {
    const build = spawn('./build.sh');
    build.stdout.on('data', (data) => {
      console.log(`stdout: ${data}`);
    });

    build.stderr.on('data', (data) => {
      console.log(`stderr: ${data}`);
    });

    build.on('close', (code) => {
      console.log(`child process exited with code ${code}`);
    });
}

然后使用 forever start trigger.js 保证这货在后台监听 2800 端口。在同级目录写个 Shell 文件来指定文档的构建。

#!/usr/bin/env bash
BASE_DIR=$(dirname $0)
cd ${BASE_DIR}
BASE_DIR=`pwd`
echo ${BASE_DIR}
git clone https://github.com/syhily/gossip.git
cd ${BASE_DIR}/gossip/docs
make html
\cp -rf ${BASE_DIR}/gossip/docs/_build/html/* ${BASE_DIR}
cd ${BASE_DIR}
rm -rf gossip

剩下的就是配置 Virtual Host 啦

location /build {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $http_host;
    proxy_pass http://127.0.0.1:2800;
}

在 Github 上配置好对应的 Webhook 地址,剩下的事情就是愉快地写文档 Push 啦,自动化真好。


以上所述就是小编给大家介绍的《写个 Webhook 去构建文档》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

硅谷之火

硅谷之火

保罗·弗赖伯格、迈克尔·斯韦因 / 张华伟 编译 / 中国华侨出版社 / 2014-11-1 / CNY 39.80

《硅谷之火:人与计算机的未来》以生动的故事,介绍了计算机爱好者以怎样的创新精神和不懈的努力,将计算机技术的力量包装在一个小巧玲珑的机壳里,实现了个人拥有计算机的梦想。同时以独特的视角讲述了苹果、微软、太阳微系统、网景、莲花以及甲骨文等公司的创业者们在实现个人计算机梦想的过程中创业的艰辛、守业的艰难、失败的痛苦,在激烈竞争的环境中奋斗的精神以及在技术上不断前进的历程。一起来看看 《硅谷之火》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

html转js在线工具
html转js在线工具

html转js在线工具