部署接口服务
我们在刚刚部署了 gitbook 的服务器上面创建一个名为 webhook 的文件夹,在文件夹里面我们创建三个文件,分别是index.js
,package.json
,auto_build.sh
index.js
内容如下:这里我们的接口名字和 secret
需要跟在 Gitlab 上面配置的一样
var http = require('http'); var spawn = require('child_process').spawn; # 导入 Gitlab 的 webhook var createHandler = require('gitlab-webhook-handler'); var handler = createHandler({ path: '/autobuild', secret: 'autobuild' }); http.createServer(function (req, res) { handler(req, res, function (err) { res.statusCode = 404; res.end('no such locationsssssssss'); }); }).listen(6666); handler.on('error', function (err) { console.error('Error:', err.message) }); handler.on('push', function (event) { console.log('Received a push event for %s to %s', event.payload.repository.name, event.payload.ref); runCommand('sh', ['/root/webhook/auto_build.sh'], function( txt ){ console.log(txt); }); }); function runCommand( cmd, args, callback ){ var child = spawn( cmd, args ); var response = ''; child.stdout.on('data', function( buffer ){ response += buffer.toString(); }); child.stdout.on('end', function(){ callback( response ) }); child.stderr.on('data', (data) => { console.log(`stderr: ${data}`); }); }
简单介绍一下上面的 JS 代码,创建一个服务监听 6666 端口,提供一个名叫 autobuild
的接口,在收到 push 操作的时候就执行/root/webhook/auto_build.sh
路径下的脚本。
auto_build.sh
脚本的内容如下:
#! /bin/bash SITE_PATH='/root/test-doc' #USER='admin' #USERGROUP='admin' cd $SITE_PATH #git reset --hard origin/master #git clean -f git pull # 切换到 dev 分支,可以自己设定 git checkout dev # 启动 gitbook nohup gitbook serve > /dev/null 2>&1 & #chown -R $USER:$USERGROUP $SITE_PATH
脚本里面主要就是拉取这新的内容,然后切换到 dev 分支,再执行gitbook serve
命令,采用的是nohup gitbook serve > /dev/null 2>&1 &
package.json
的内容如下:
{ "name": "autobuild", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "gitlab-webhook-handler": "1.0.1" } }
启动服务器之前,先执行npm install
安装依赖,然后执行nohup node index.js &
,启动成功过后我们就可以进行文档修改然后 push 到Gitlab 上面,观察是否及时更新。这里注意一个点,我们的脚本里面使用的是 dev 分支,所以要 push 到 dev 分支。我们可以在 Gitlab 的 Webhook 下面看到我们 push 过后触发的详情,可以看到是否成功。这里如果不成功,我们再检查下防火墙是否开启了 6666 端口,没有的话,按照上面的操作开启即可。
到这里我们整个基于 Gitbook 和 Gitlab Webhook 实现文档实时更新的效果就达成了,后续在使用的时候,我们只需要修改内容,然后 push 到对应的仓库,然后在网站上就能看到最新的修改,大家感兴趣可以自己试试哦。
Tips
Gitbook 可以支持插件以及自定义样式,我们只需要在 test-doc 目录下面,创建一个名叫 book.json
的文件,可以在这个文件中自定义一些特定的内容,增加了插件,在启动的时候需要使用gitbook install
安装一下即可。
{ "title": "XXXX对接API", "description": "这是 Gitbook 与 Gitlab Webhook 集成的项目", "author": "Java 极客技术", "plugins": ["splitter","tbfed-pagefooter","expandable-chapters-small"], "pluginsConfig": { "tbfed-pagefooter": { "copyright":"Copyright © COOCAA", "modify_label": "该文件修订时间:", "modify_format": "YYYY-MM-DD HH:mm:ss" } }, "styles": { "website": "./customStyle.css" }
styles
下面可以增加我们自己写的样式,如果需要的话可以加入。
总结
今天阿粉给大家分享了一个使用的技能,在工作中搭建起来,相信会很有帮助的。有任何问题可以在公众号下面留言,或者在知识星球中提问,阿粉看到会解答的。