写个 Webhook 去构建文档

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

内容简介:写个 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 啦,自动化真好。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

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

京东技术解密

京东技术解密

京东研发体系 / 电子工业出版社 / 2014-11-18 / 65

京东高速的增长、闪电响应的供应链、庞大的团队规模等背后内幕,对于业界一直像谜一样神秘。随着成为中国B2C领导厂商以及在纳斯达克上市,京东越来越需要开放自己,与业界形成更好的交流与融合。《京东技术解密》的面世,就是京东技术团队首次向业界集体亮相。本书用翔实的内容为读者逐一解答——如何用技术支撑网站的综合竞争实力,如何把握技术革新的时间点,如何应对各种棘手问题及压力,如何在网站高速运转的情况下进行系统......一起来看看 《京东技术解密》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

SHA 加密
SHA 加密

SHA 加密工具