利用Travis+Github自动化部署Gitbook(legacy)


前言

之前Gitbook的Oauthtoken失效了,而网站又不提供新账号的绑定,导致出现一件很尴尬的事情是没有办法登陆账号去更新网站。

只能想办法迁移。

新版的Gitbook比老版的访问速度还慢,而且不支持Git,果断放弃。

虽然Legacy Gitbook已经过时,但是网站布局的简约和高效还是让我不愿放弃

最终找到了一种Travis+Github的解决方案来实现自动化部署和网站加速(相对于挂在gitbook.io上,挂在github.io上似乎要快的多...)

本地环境搭建

首先还是要安装node.js环境,这里使用yarn作为包管理器

yarn global add gitbook-cli

可以用-V来检查安装情况

gitbook -V
CLI version: 2.3.2
GitBook version: 3.2.3

然后就可以利用init来初始化环境

mkdir <dirname>
cd <dirname>
git init
gitbook init

生成了README.md SUMMARY.md

首页文件和目录文件

首页就是普通的md文件

目录文件的构成大致是这样的

//SUMMARY.md
# Summary

* [About](README.md)
* [Library](library/README.md)
  * [Steganography](library/steganography.md)
* [Contest](contest/README.md)
  * [TSCTF-J 2019](contest/tsctf-j2019.md)
* [ADworld](adworld/README.md)
  * [Misc Exercise Area](adworld/misc-exercise-area.md)
  * [Crypto Exercise Area](adworld/crypto-execrise-area.md)
* [BUUOJ](buuoj/README.md)
  * [SUCTF 2019](buuoj/suctf2019.md)
  * [CISCN2019 华北赛区](buuoj/ciscn-northeast-2019.md)
  * [CISCN2019 初赛](buuoj/ciscn-pre-2019.md)
  * [De1CTF 2019](buuoj/de1ctf-2019.md)

通过目录文件来链接各个文件下的md文件(只有在SUMMARY.md中的文件会被渲染

事实上你可以通过在项目文件夹建立book.json来设置插件

你可以参照下面这个示例建立你的book.json(集成了一些常用的功能)

{
    "title": "Eki's CTF",
    "description": "CTF笔记",
    "author": "Eki",
    "links": {
        "sidebar": {
            "主站 Eki's Blog": "https://ieki.xyz"
        }
    },
    "plugins": [
        "expandable-chapters",
        "splitter",
        "katex",
        "tbfed-pagefooter",
        "sitemap",
        "theme-comscore",
        "anchor-navigation-ex",
        "-lunr", "-search", "search-plus",
        "custom-favicon",
        "ga",
        "multipart",
        "advanced-emoji",
        "github",
        "-sharing",
        "sharing-plus",
        "klipse",
        "donate",
        "pageview-count",
        "code",
        "lightbox",
        "auto-scroll-table"
    ],
    "pluginsConfig": {
        "theme-default": {
            "showLevel": false
        },
        "tbfed-pagefooter": {
            "copyright": "&copy Eki's CTF-notes 2019-2020 CC-by-nc-sa 4.0。",
            "modify_label": "本书最后更新于:",
            "modify_format": "YYYY-MM-DD HH:mm:ss"
        },
        "expandable-chapters": {},
        "sitemap": {
            "hostname": "https://ctf.ieki.xyz/"
        },
        "anchor-navigation-ex": {
            "showLevel": false,
            "associatedWithSummary": false,
            "mode": "float",
            "float": {
                "showLevelIcon": false,
                "level1Icon": "fa fa-hand-o-right",
                "level2Icon": "fa fa-hand-o-right",
                "level3Icon": "fa fa-hand-o-right"
            }
        },
        "favicon": "/assets/images/favicon.ico",
        "ga": {
            "token": "<YourToken>"
        },
        "github": {
            "url": "https://github.com/ekixu"
        },
        "sharing": {
            "douban": false,
            "facebook": false,
            "google": true,
            "pocket": false,
            "qq": false,
            "qzone": true,
            "twitter": true,
            "weibo": true,
         "all": [
              "douban", "facebook", "google", "instapaper", "linkedin","twitter", "weibo", 
              "messenger","qq", "qzone","viber","whatsapp"
          ]
        },
        "donate": {
            "wechat": "https://ctf.ieki.xyz/assets/images/wechat.jpg",
            "alipay": "https://ctf.ieki.xyz/assets/images/alipay.jpg",
            "title": "",
            "button": "赏",
            "alipayText": "支付宝打赏",
            "wechatText": "微信打赏"
        }
    }
}

也可以参照

网上的插件整理(因为legacy gitbook已经不受支持了,所以原来的插件市场也没了....)

https://www.jianshu.com/p/427b8bb066e6

通过

gitbook build
gitbook serve

来进行编译测试

可以看到在localhost:4000 网站已经跑起来了

远程环境配置

首先是将本地的仓库链接到Github上

在Github上新建完项目后

git remote add origin <your remote address>

(这一步需要github上拥有本机的ssh公钥

可以在本地用sshkeygen生成并上传

ssh-keygen -t rsa -C "[email protected]"

然后连接到Travis服务 travis-ci.org

登陆并授权,链接到对应仓库后

在设置(Setting)界面输入必要的几个环境变量(Environment Variables)

  • CUSTOM_DOMAIN:

自定义域名地址,如果你希望绑定自己的域名的化

  • GIT_EMAIL:进行GIT操作使用的邮箱
  • GIT_NAME:进行GIT操作使用的名字
  • GITHUB_TOKEN:在Github>Setting>Developer settings> Personal access tokens 生成(一般只需要勾选repo项就够用了)

然而这样并不能让Travis跑起来

你需要在项目仓库中新建.travis.yml来告诉travis如何渲染你的博客

对应Gitbook,我们可以编写这样的脚本

language: node_js

node_js:
  - "8"

# 缓存依赖
cache:
  directories:
    - $HOME/.npm

before_install:
  - export TZ='Asia/Shanghai' # 更改时区

# 依赖安装
install:
  - npm install gitbook-cli -g
  # 安装 gitbook 插件
  - gitbook install

# 构建脚本
script:
    # 自定义输出目录 gitbook build src dest
  - gitbook build . ./build
  # - gitbook build . ./build/$CUSTOM_PATH

# 分支白名单
branches:
  only:
    - master # 只对 master 分支进行构建

deploy:
  provider: pages
  skip_cleanup: true
  # 在项目仪表盘的 Settings -> Environment Variables 中配置
  github_token: $GITHUB_TOKEN
  # 将 build 目录下的内容推送到默认的 gh-pages 分支上,并不会连带 build 目录一起
  local_dir: build
  fqdn: $CUSTOM_DOMAIN
  name: $GIT_NAME
  email: $GIT_EMAIL
  on:
    branch: master

保存修改git commit完并推送到远程分支后,可以看见Travis开始跑起来了,过一段时间应该就能看到渲染好的网站了

travis

ctfpage

至此基于Github+Travis自动化部署Gitbook(legacy)网站 https://ctf.ieki.xyz 建设完成

修改网站增加文章只需要在本地对应修改和增加md文件,推送到远程仓库即可

声明:Eki's Blog|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 利用Travis+Github自动化部署Gitbook(legacy)


A Dreamer Full of Dream