使用Jenkins自动发布Gitbook书籍
本文介绍如何使用 jenkins 实现自动化,能够自动监控Github仓库,当有更新时触发根据.md文件生成.html静态网页内容,并发布到Nginx等的Web服务器。
这是【配置GitHub Push自动触发Jenkins构建】的一个特例。下面是以gitbook的项目为例,其他项目只是最后的执行脚本不同。
何以言之
用户需求
公司的一些文档或者个人知识分享,需要比较频繁的发布,希望实现内容从github自动生成gitbook的网页内容,用户只需要关注文档编写和修改,并提交到Git仓库,而不必理会后续一系列繁琐重复的编译发布动作。
解决方案
Github和Gitbook都对文档(博客网站等)的发布提供自动化支持,Github中可以将生成的html page发布github pages上,Gitbook也可以通过设置实现对Github的拉取发布。
但如果想部署到自己的服务器,那需要做一些配置。具体参照以下操作。
何以操之
前置条件
- [x] 准备好Jenkins 、Nginx (安装部署见另篇)
- [x] 配置Jenkins插件,Git,GitHub的一些相关插件
- [x] 在Jenkins所在机器上预装Nodejs和Gitbook
- [x] Gitbook项目书籍(文档)放在Github远程仓库中
注:
- 安装Nodejs是因为Gitbook依赖Nodejs。
- 为了具有代表性,我们假设Jenkins和Nginx Web服务器单独部署,不在同一台物理机器上(IP地址、DN域名不一样)。
配置GitHub
获取GitHub的Personal access token。
登录,进入Settings-Personal settings,拉到最下面,左下角找到Developer settings
点击左下角的Personal access tokens
点击右上角的Generate new token
按钮。
提示输入GitHub密码,输入确定后跳转到创建token的页面
在Token description
输入描述,
勾选repo
和admin:repo_hook
,
点击底部的Generate token
按钮,产生一个新的access token。
务必注意:将此字符串复制到记事本备用,后面Jenkins任务中会用到。
关闭这个页面就找不到这个字符串了。
配置Jenkins
登录Jenkins,选择管理Jenkins
点击系统设置
在系统设置页面找到”GitHub”,点击添加GitHub Server
如果没有,返回 在插件管理中添加"GitHub"插件。
填写名称,API_URL自动已经默认https://api.github.com
(不要修改)
选中管理 Hook
,选择Add
->Jenkins
类型选择Secret text
,Secret填入上一步骤在GitHub上生成的Personal access tokens,补充描述信息,点击添加
完成。
选择刚才的凭据
点击右侧的连接测试
按钮,无error则OK。
最后点击页面最底部的Save保存
按钮。
查看github仓库地址
github进入自己的项目仓库
选择存放Gitbook的仓库
选择HTTPS
,点击右边的复制按钮,粘贴上面我的仓库地址:https://github.com/Robust-Robot/JimBook.git
注意区分,地址栏URL是项目主页:https://github.com/Robust-Robot/JimBook,后面也会用到。
编辑Shell脚本(如果Jenkins和Nginx在同一个服务器)
Bash脚本内容如下,保存为jenkins.sh
,存放在git仓库的根目录下:
#!/bin/bash
source /etc/profile
echo "**** env ****"
echo `pwd`
echo `id`
echo "PATH=$PATH"
echo "**** show book list from git ****"
echo `ls -l`
echo
echo "**** for nodejs ****"
npm install
echo "**** build html start ****"
gitbook build
echo "**** build html end ****"
echo "static html content is located in _book folder:"
echo `ls -l _book`
echo "**** remove old document ****"
rm -rf /usr/share/nginx/html/books/jimsbon
echo "**** copy files in _book to nginx ****"
cp -r _book /usr/share/nginx/html/books/jimsbon
echo "**** Bingo! ****"
echo "New book was deployed to nginx:"
echo `ls -l /usr/share/nginx/html/books/jimsbon`
Jenkins创建Job并配置
NEW ITEM
在Jenkins中点击new item
新建Job。
确定。
General
配置信息如下:
如果不想保留太多版本,设置勾选丢弃旧的构建
:
SCM源码管理
选择Git
输入上面的github仓库地址,点击Add
添加一个Jenkins凭据
类型选择Username with password
,源码库浏览器选择githubweb
,
URL输入项目主页 ,我的是:https://github.com/Robust-Robot/JimBook
Build Triggers
构建触发器勾选GitHub hook trigger for GITScm polling
Build Environment
构建环境勾选Use secret text(s) or file(s)
Bindings
绑定
下面的”凭据”选择我们之前配置过的Personal access tokens
结果如下
Build
构建选择 执行 Shell
设置构建脚本。
Gitbook的项目详细配置如下:
其中:
- 执行
gitbook build
生成静态页面 - 将
_book
文件夹下的所有文件复制到Web服务目录(nginx/www/html)
在Windows下改为:
更正:上面npm install
应为:gitbook install ./
搞成.bat批处理如C:\build_gitbook.bat比较好。
点击Save保存。
webhook方式(push)触发
本方式需要配置GitHub的webhook地址(填写到GitHub上)。GitHub通过该请求地址通知到Jenkins。
示例:假如登录Jenkins的地址是: http://192.168.100.1:8080/jenkins,那么webhook地址就是 http://192.168.100.1:8080/jenkins/github-webhook
配置具体操作:
- 登录GitHub,进入Gitbook项目的仓库
- 依次点击右上角的
Settings
,点击左侧Webhooks
,点击Add webhook
。可能会提示输入GitHub密码,输入并确定后跳转。 - 在
Payload URL
位置填入webhook地址,再点击底部的Add webhook
按钮以完成webhook配置。
如果不行,content type 换一下。
注:当用户在github有代码提交(push),GitHub就会向此webhook地址发请求,通知Jenkins触发自动构建。
Poll SCM 方式
如果是定时检查源码变更(根据SCM软件的版本号),可以如下设置:
设置 Poll SCM: H/3 * * * *
表示每3分钟检查一次git,然后执行command sh jenkins.sh
。
配置GitHub Push自动触发Jenkins的构建
Gitbook命令build 实现.md文档格式转换生成.html网页格式。
以上这种情况,适合Jenkins和Nginx安装在同一台物理机器上。如果不是,还需要执行下面步骤。
发布Web服务
可以通过配置ftp 或者ssh实现。
测试验证,大功告成
完成后可以测试一下整个流程是否通过。
在Jenkins的项目页面点击Build Now
(立即构建)手动执行一下构建,
如果成功,可以执行git push
命令看看能不能触发自动构建。
总结工作原理
- 用户修改本地文档
- 用户提交更新内容到远程github仓库(或者直接在github的web界面上编辑)
- GitHub Push自动触发Jenkins监控构建,执行Job任务,生成HTML内容
- 自动复制文件到Nginx Web服务器。
注:
用户只需要做修改、提交(commit)、上传(push)。
附录
名词解释:
- SCM----源码管理(Source Code Management),也称为版本控制系统(VCS/Version Control System)。