写个 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 去构建文档》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

你不知道的JavaScript(上卷)

你不知道的JavaScript(上卷)

[美] Kyle Simpson / 赵望野、梁杰 / 人民邮电出版社 / 2015-4 / 49.00元

JavaScript语言有很多复杂的概念,但却用简单的方式体现出来(比如回调函数),因此,JavaScript开发者无需理解语言内部的原理,就能编写出功能全面的程序;就像收音机一样,你无需理解里面的管子和线圈都是做什么用的,只要会操作收音机上的按键,就可以收听你喜欢的节目。然而,JavaScript的这些复杂精妙的概念才是语言的精髓,即使是经验丰富的JavaScript开发者,如果没有认真学习也无......一起来看看 《你不知道的JavaScript(上卷)》 这本书的介绍吧!

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

各进制数互转换器

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试