使用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

image-20210115150136811

点击左下角的Personal access tokens

image-20210115150316241

点击右上角的Generate new token按钮。

image-20210115150834874

提示输入GitHub密码,输入确定后跳转到创建token的页面

image-20210115150509420

Token description输入描述,

image-20210115151219156

勾选repoadmin:repo_hook

image-20210115151316823

点击底部的Generate token按钮image-20210115151403927,产生一个新的access token。

image-20210115151526461

务必注意:将此字符串复制到记事本备用,后面Jenkins任务中会用到。

关闭这个页面就找不到这个字符串了。

配置Jenkins

登录Jenkins,选择管理Jenkins

image-20210115143941025

点击系统设置

image-20210115144106193

在系统设置页面找到”GitHub”,点击添加GitHub Server

image-20210115145035812

如果没有,返回 在插件管理中添加"GitHub"插件。

填写名称,API_URL自动已经默认https://api.github.com(不要修改)

选中管理 Hook,选择Add ->Jenkins

image-20210115152335573

类型选择Secret text,Secret填入上一步骤在GitHub上生成的Personal access tokens,补充描述信息,点击添加完成。

选择刚才的凭据

image-20210115152638656

点击右侧的连接测试按钮,无error则OK。

最后点击页面最底部的Save保存按钮。

查看github仓库地址

github进入自己的项目仓库

image-20210115153417231

选择存放Gitbook的仓库

image-20210115153754850

选择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。

image-20210115154920905

确定。

General

配置信息如下:

image-20210115155207707

如果不想保留太多版本,设置勾选丢弃旧的构建

image-20210115225613073

SCM源码管理

选择Git

image-20210115155955252

输入上面的github仓库地址,点击Add添加一个Jenkins凭据

image-20210115155854118

类型选择Username with password,源码库浏览器选择githubweb

URL输入项目主页 ,我的是:https://github.com/Robust-Robot/JimBook

image-20210115160816877

Build Triggers

构建触发器勾选GitHub hook trigger for GITScm polling

image-20210115161145123

Build Environment

构建环境勾选Use secret text(s) or file(s)

image-20210115161323280

Bindings

绑定

image-20210115161633659

下面的”凭据”选择我们之前配置过的Personal access tokens

结果如下

image-20210115161807299

Build

构建选择 执行 Shell

image-20210115161957568

设置构建脚本。

Gitbook的项目详细配置如下:

image-20210115164504897

其中:

  • 执行gitbook build生成静态页面
  • _book文件夹下的所有文件复制到Web服务目录(nginx/www/html)

在Windows下改为:

image-20210115225350310

更正:上面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项目的仓库

image-20210115193515889

  • 依次点击右上角的Settings,点击左侧Webhooks,点击Add webhook。可能会提示输入GitHub密码,输入并确定后跳转。
  • Payload URL位置填入webhook地址,再点击底部的Add webhook按钮以完成webhook配置。

image-20210115195231287

如果不行,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实现。

测试验证,大功告成

完成后可以测试一下整个流程是否通过。

image-20210115192518554

在Jenkins的项目页面点击Build Now (立即构建)手动执行一下构建,

image-20210115192814862

如果成功,可以执行git push命令看看能不能触发自动构建。

总结工作原理

  1. 用户修改本地文档
  2. 用户提交更新内容到远程github仓库(或者直接在github的web界面上编辑)
  3. GitHub Push自动触发Jenkins监控构建,执行Job任务,生成HTML内容
  4. 自动复制文件到Nginx Web服务器。

注:

用户只需要做修改、提交(commit)、上传(push)。

附录

名词解释:

  • SCM----源码管理(Source Code Management),也称为版本控制系统(VCS/Version Control System)。
Copyright © 德和居 2021 粤ICP备20069867号 在CC-BY-NC-SA 4.0协议下授权使用,除非另有说明 all right reserved,powered by Gitbook本文修订时间: 2021-01-16 00:21:17

results matching ""

    No results matching ""

    results matching ""

      No results matching ""