Travis CI 构建 GitBook 实践
时间:2022-04-29
本文章向大家介绍Travis CI 构建 GitBook 实践,主要内容包括准备 GitBook 项目文件、新建 .travis 文件夹、编写 Dockerfile 文件、编写 docker-entrypoint.sh 文件、编写 docker-compose.test.yml 文件、加密 SSH 私钥、根目录文件、编写 docker-compose.yml、构键 Docker 镜像并推送、推送 GitBook 项目到 GitHub、示例、相关链接、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
本文只提供思路,具体实现请查看本人博客的其他文章。务必对 Travis CI 基础知识 了解之后再阅读本文。
刚开始在 Travis CI
中从零开始搭建环境,全部执行时间为 三分半
,将环境部署进 Docker, docker run XXX
之后直接开始生成,时间缩短为 一分半
。
准备 GitBook 项目文件
新建 .travis
文件夹
复制根目录 book.json
文件
编写 Dockerfile
文件
FROM node:9-alpine
ENV TZ=Asia/Shanghai
WORKDIR /srv/gitbook
COPY book.json book.json
COPY docker-entrypoint.sh /usr/local/bin/
RUN apk add --no-cache
tzdata
&& npm install -g gitbook-cli
&& gitbook install
&& ln -s /usr/local/bin/docker-entrypoint.sh /
&& rm -rf /root/.npm /tmp/*
EXPOSE 4000
VOLUME /srv/gitbook-src
WORKDIR /srv/gitbook-src
ENTRYPOINT ["docker-entrypoint.sh"]
CMD server
编写 docker-entrypoint.sh
文件
#!/bin/sh
START=`date "+%F %T"`
if [ $1 = "sh" ];then sh ; exit 0; fi
rm -rf node_modules _book
cp -a . ../gitbook
cd ../gitbook
main(){
if [ "$1" = build ];then gitbook build; cp -a _book ../gitbook-src; echo $START; date "+%F %T"; exit 0; fi
gitbook serve
exit 0
}
main $1 $2 $3
编写 docker-compose.test.yml
文件
sut:
build: .
volumes:
- ../:/srv/gitbook-src
command: build
该文件用于 Docker Cloud 在每次提交 PR 时测试。
加密 SSH 私钥
该文件一般为 id_rsa.enc
根目录文件
编写 .travis.yaml
language: bash
sudo: required
services:
- docker
before_install:
- openssl aes-256-cbc -K $encrypted_6cc8cff04075_key -iv $encrypted_6cc8cff04075_iv
-in .travis/id_rsa.enc -out ~/.ssh/id_rsa -d
- chmod 600 ~/.ssh/id_rsa
- export TZ='Asia/Shanghai'
- date
- git config --global user.name "khs1994"
- git config --global user.email "khs1994@khs1994.com"
script:
- docker run -it --rm -v $PWD:/srv/gitbook-src yeasy/docker_practice build
after_success:
- sudo chmod -R 777 _book
- cd _book
- git init
- git remote add origin "$REPO"
- git add .
- COMMIT=`date "+%F %T"`
- git commit -m "Travis CI Site updated $COMMIT"
- git push -f origin master:"$DEPLOY_BRANCH"
env:
global:
- DEPLOY_BRANCH: pages
- REPO: git@github.com:yeasy/docker_practice.git
addons:
ssh_known_hosts:
- github.com
branches:
only:
- master
编写 docker-compose.yml
version: "3"
services:
server:
# build: ./.travis
image: username/project:latest
ports:
- 4000:4000
volumes:
- ./:/srv/gitbook-src
command: server
build:
image: username/project:latest
volumes:
- ./:/srv/gitbook-src
command: build
development:
build: ./.travis
image: username/project:latest
ports:
- 4000:4000
volumes:
- ./:/srv/gitbook-src
command: server
# command: build
构键 Docker 镜像并推送
# 根目录执行
$ docker-compose build development
$ docker-compose push development
不在本地构建镜像也行,在 Docker Cloud 关联 GitHub 仓库构建也可以。
推送 GitBook 项目到 GitHub
示例
如果不清楚文件夹结构,可以参考:https://github.com/yeasy/docker_practice
相关链接
- https://github.com/steveklabnik/automatically_update_github_pages_with_travis_example
- http://blog.csdn.net/qq8427003/article/details/64921201
- 字符串hash入门
- R语言数据处理——数据合并与追加
- python爬取链家租房之获取房屋页面的详细信息(房名,地址,房价,面积,url)
- 信用卡“坏账”客户分析(二)
- Mac上提升python运算速度-PyPy初体验
- python处理json数据(复杂的json转化成嵌套字典并处理)
- Pointer-network理论及tensorflow实战
- python3 log文件处理获取某天需要的数据
- 实战深度强化学习DQN-理论和实践
- Python 工匠:编写条件分支代码的技巧
- python3 下 Zabbix监控调用graph.get并且下载监控图
- 用R语言复盘美国总统大选结果~
- 最新Apache Spark平台的NLP库,助你轻松搞定自然语言处理任务
- 使用Seq2Seq+attention实现简单的Chatbot
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- [887]python中@classmethod和@staticmethod
- leetcode每日一题-99. 恢复二叉搜索树
- Java 两个经纬度获取方位
- 使用Python实现基本初等函数可视化
- 递归回溯--复原IP地址
- 通过 generic-webhook-trigger 插件实时获取 Bitbucket Repository Events
- 初识TypeScript:查找指定路径下的文件按类型生成json
- Xamarin Forms WPF 干掉默认的窗口导航条
- WPF 从零手动创建承载 Xamarin Forms 项目
- 帝都房价回调?带你用Python了解北京二手房市场现状
- Zabbix 利用 ncat 监控远端端口状态
- MySQL“被动”性能优化汇总!
- H3C WA2610i-GN 无线AP FAT 配置案例
- java强引用、软引用、弱引用、虚引用以及FinalReference
- 读源码——JDK动态代理