写个 Webhook 去构建文档

栏目: 编程工具 · 发布时间: 6年前

内容简介:最近写了一个首先是文档放在哪里,第一时间想到的自然是 Github Pages,但是我这个破文档用的是 Sphinx,自然就没法直接用 Jeklly 和 Markdown 让 Github 去自动构建,必须得用静态资源形式。也就意味着,我每次提交,都得手动将生成的文档文件,要么是 Push 到我像我这种懒人,写文档都很懒了,自然是不愿意做这种重复工作。换言之,我能写文档都很不容易了。这东西不自动化怎么行。于是,Github Pages 方案第一时间 Pass。

最近写了一个 破开源项目 ,在写它的文档的时候,突然想用 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 啦,自动化真好。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

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

数据结构基础

数据结构基础

[美]Ellis Horowitz 霍罗维兹 / 朱仲涛 / 清华大学出版社 / 2009-3 / 49.00元

《数据结构基础(C语言版)(第2版)》是最经典数据结构教材的最新版本,国内外大多数的同类教材都是以《数据结构基础(C语言版)(第2版)》为蓝本编写而来的。《数据结构基础(C语言版)(第2版)》用C作为描述语言,全面而生动地介绍了数据结构的有关知识,如数组、栈、队列、链表、树和图,以及构成所有软件基础的排序散列技术。此外,《数据结构基础(C语言版)(第2版)》还介绍了各种高级或特殊数据结构,如优先级......一起来看看 《数据结构基础》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

SHA 加密
SHA 加密

SHA 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具