gitbook一仓库多本书持续化部署
引言
本文档用户指导新手如何部署GitLab+Jenkins自动化构建GitBook,并使用Nginx发布资料。在部署过程中,如遇到任何问题,请自行百度。
注意: 此文章的环境和数据,仅为用于调试的片段,很可能有版本,路径不一致等情况,请部署者不必过于考究其中的细节。
以下教程使用的环境如下:
| 环境 | 版本 |
|---|---|
| System | CentOS 6 |
| GitLab | gitlab-ce-10.8.4-ce.0.el6.x86_64.rpm |
| Jenkins | jenkins-2.121.1-1.1.noarch.rpm |
| Nginx | nginx-1.14.0.tar.gz |
| nodejs | node-v8.11.3-linux-x64.tar.xz |
| npm | 3.10.10 |
| GitBook | 2.3.2 |
GitLab安装
官网:https://about.gitlab.com/installation/
官网有针对各系统的安装教程,很详细,这里主要拿CentOS 6来说
- 安装必要的依赖项(root用户不用sudo开头)
sudo yum install -y curl policycoreutils-python openssh-server cronie
sudo lokkit -s http -s ssh sudo yum install postfix
sudo service postfix start
sudo chkconfig postfix on
添加GitLab软件包库
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
安装GitLab
sudo yum -y install gitlab-ee
GitLab本地配置
GitLab包含了众多插件,要配置端口等信息,打开/etc/gitlab/gitlab.rb
vim /etc/gitlab/gitlab.rb
配置外部URL
默认情况下,外部URL为 'http://gitlab.example.com' ,这个域名外部是无法访问的,除非你做了映射,如果不想做什么映射,直接将该域名改成本机IP:Nginx_port,以8.5为例
external_url 'http://192.168.8.5'
配置Nginx端口
GitLab集成Nginx插件,默认端口与是80,如果该端口被占用,则要修改端口,修改的端口与要和外部URL端口相同,不然会引起git无法使用http/https,将 ‘nginx['listen_port'] = 80’ 解注释, 再修改其端口,以 8899
端口为例
nginx['listen_port'] =
配置Unicorn端口
GitLab还集成了Unicorn插件,默认端口与是8080,如果该端口被占用,则要修改端口,将 ‘unicorn['port'] = 8080’ 解注释, 再修改其端口,以 8988端口为例
unicorn['port'] =
保存配置
配置文件修改后,保存不是立刻生效的,还需要命令去修改
gitlab-ctl reconfigure
- 关闭防火墙
如果系统还开了防火墙,可能会导致后台访问不到,要关闭防火墙,或者设置过滤端口,以下选择关闭防火墙比较方便,如果选择端口设置,则需要看哪个端口要使用,再去设置
service iptables stop
GitLab后台配置
本地配置完成后,还需要登录后台配置
- 打开gitlab 后台,后台地址为
http://gitlab_url:nginx_port
- 第一次打开后台需要设置密码,再登录,自行设置

登陆用户名为 root,密码为刚刚设置的
- 配置本地网络可访问,配置地址为
http://'gitlab_url:nginx_port'/admin/application_settings

- 添加SSH公钥
用以下命令生成rsa密钥
ssh-keygen -t rsa
将生成的公钥复制到GitLab中
Jenkins安装
直接在官网上下载,选择相应系统版本的安装包,以我下载的 “jenkins-2.121.1-1.1.noarch.rpm” 为例。
- 调用命令安装
rpm -ivh jenkins-2.121.-1.1.noarch.rpm
Jenkins本地配置
- 修改端口
Jenkins默认端口为8080,若该端口被占用,可通过修改"/etc/sysconfig/jenkins"文件中的 JENKINS_PORT 字段的值达到修改端口的目的
- 启动Jenkins
Jenkins安装后,作为服务而存在,通过调用服务启动的命令去启动
service jenkins start
- 修改Jenkins用户权限
Jenkins构建需要使用Jenkins用户去执行命令,调用sudo命令去执行命令,需要面输入密码,则需要添加jenkins用户免密执行sudo权限,在 /etc/sudoers 文件中文件底部追加
jenkins ALL=(ALL) NOPASSWD:ALL
Jenkins 后台配置
本地配置完成后,还需要登录后台配置
- 打开Jenkins 后台,后台地址为
http://jenkins_url:port
第一次打开后台需要解锁,界面有提示

安装推荐插件并等待安装完成


创建一个管理员账户,也可继续使用admin账户,我选择了后者

创建url,直接保存下一步

设置Jenkins可访问
此设置可解决GitLab访问Jenkins 403错误

GitBook安装
- 安装nodejs
在nodejs官网上下载,然后解压并编译安装
./configure
make
make install
- 安装gitbook
使用npm安装gitbook
npm install gitbook-cli -g
GitBook配置
GitBook包含众多插件,有些功能需要插件支持,这里就展示要用到的几个插件的安装,其他插件可自行百度。
插件的安装分两步
- 用你npm安装插件
- 在gitbook工程下,调用以下命令安装
gitbook install
- 页脚插件tbfed-pagefooter
npm安装
npm install gitbook-plugin-tbfed-pagefooter
在gitbook工程下安装
gitbook install
Nginx安装
- 安装
在官网上下载Nginx后,解压并进入解压目录调用命令安装
./configure
make
make install
- 启动
直接调用nginx命令启动
nginx
GitLab插件安装
- 安装Gitlab Hook Plugin, Build Authorization Token Root Plugin和Gitlab Plugin

PS: 没有安装Gitlab Hook Plugin就没办法和gitlab使用webhook
没有安装Build Authorization Token,后面gitlab在Test hook时会报403错误
没有Gitlab Plugin就没办法构建Gitlab触发器
- 安装完后,返回主界面

创建GitLab仓库

创建Jenkins工程

构建脚本
gitbook_build(){
cd $
sudo gitbook install
sudo gitbook build
cd ..
}
mv_nginx()
{
sudo mkdir -p /opt/nginx/html/${JOB_NAME}/$
sudo cp -af $/_book/* /opt/nginx/html/${JOB_NAME}/$1
}
sub_log=($(git diff --name-only HEAD HEAD~ | awk '{print $0}'))
for((i=0;i<${#sub_log[@]};i++))
do
for((j=0;j<=${#arr_folder[@]};j++))
do
sub_folder=${sub_log[$i]%%/*}
if [[ $sub_folder == ${arr_folder[$j]} ]]; then
break;
elif [ $j == ${#arr_folder[@]} ]; then
arr_folder[$j]=${sub_log[$i]%%/*}
gitbook_build ${arr_folder[$j]}
mv_nginx ${arr_folder[$j]}
break;
fi
done
done
- 为GitLab仓库添加webhook
第一次测试webhook会报错,提示先提交一次,字面意思,就先push一次
提交文件
- 使用git命令提交修改和新增的内容,push后可查看结果
查看结果
在Jenkins可查看到构建记录

打开Nginx,可访问到该文档

Calibre插件安装
GitBook不自带转PDF功能,需要安装Calibra
- 升级libGL
安装Calibre会遇到如下错误:
ImportError: /lib64/libGL.so.: undefined symbol: drmFreeDevice
需要先升级libGL,以本文的环境为例,仅需要使用yum升级即可
yum update libGL
- 安装Calibre
官网有安装教程,很简单,但要求python版本在2.7.9和3之间,如果没有,请安装升级,此处不po出升级方式,读者自行百度。Celibra安装命令:
sudo -v && wget -nv -O- https://download.calibre-ebook.com/linux-installer.sh | sudo sh /dev/stdin
中文支持
GitBook导出的PDF不支持中文,需要安装插件和字体
- 安装插件
插件"gitbook-plugin-yahei",与其他插件安装方式一样
npm install gitbook-plugin-yahei
并在gitbook工程下安装
gitbook install
- 字体
将微软雅黑字体("msyh.ttc"和"msyh.ttf"文件)拷到Linux系统"/usr/share/fonts/truetype"目录下,没有该目录就创一个,没有该字体就下一个
- 配置
在book.json中添加插件"yahei",并配置"fontSettings"
"plugins": [
"yahei",
],
"pluginsConfig": {
"fontSettings": {
"theme": "white",
"family": "msyh",
"size": 2
}
}
封面
gitbook 的封面可以通过插件auto cover自动生成,也可以自己配置。
如果要使用自定义的封面,在书籍的根目录下放置"cover.jpg",如果想要缩略图可以放置"cover_small.jpg",文件格式必须为 jpg。
导出
导出并不是调用calibre命令,还是调用gitbook命令
gitbook <pdf|epub|mobi> [path] [bookname]
以pdf为例
- 直接导出pdf
gitbook pdf
- 导出指定书籍名
gitbook pdf . mybook.pdf
gitbook一仓库多本书持续化部署的更多相关文章
- Docker+GitLab+Jenkins+kubernetes实现DevOps 持续化集成和持续化部署概念图
Docker+GitLab+Jenkins+kubernetes实现DevOps 持续化集成和持续化部署概念图 转载自:原创 IT综合 作者:百联达 时间:2017-05-09 15:48:08 41 ...
- jenkins+Docker持续化部署(笔记)
参考资料:https://www.cnblogs.com/leolztang/p/6934694.html (Jenkins(Docker容器内)使用宿主机的docker命令) https://con ...
- Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站(一)--技术流ken
前言 在之前已经写了关于Git,Gitlab以及Ansible的两篇博客<Git+Gitlab+Ansible剧本实现一键部署Nginx--技术流ken>,<Git+Gitlab+A ...
- jenkins+git+gitlab+ansible实现持续集成自动化部署
一.环境配置 192.168.42.8部署gitlab,节点一 192.168.42.9部署git,Jenkins,ansible服务器 192.168.42.10节点二 二.操作演示 ①gitlab ...
- Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站
环境准备 三台主机: 一台主机部署jenkins和作为ansible的管理主机 一台主机部署gitlab和ansible的节点1 一台主机为ansible的节点2 防火墙和apache服务关闭 第一步 ...
- Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站(一)
在之前已经写了关于Git,Gitlab以及Ansible的两篇博客<Git+Gitlab+Ansible剧本实现一键部署Nginx--技术流ken>,<Git+Gitlab+Ansi ...
- Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站(6)
前言 在之前已经写了关于Git,Gitlab以及Ansible的两篇博客<Git+Gitlab+Ansible剧本实现一键部署Nginx–技术流ken>,<Git+Gitlab+An ...
- (转)持续化集成工具CruiseControl.NET
持续化集成工具CC.NET[ 引言: 团队开发需要 进行集中的项目文件管理与有效的协调,我们采用源代码管理工具协助我们管理,卓有成效.限定重要文件的访问权限.使用悲观锁杜绝成员同时编辑同一份文件. 不 ...
- [dotnet core]落地微服务特色的DevOps管道,持续集成/部署到kubernetes。
目录 前言 目标 工具 - 最小的学习成本 方案 - 愿景 1. 持续集成 - CI 2. 持续部署 - CD 部署环境 1. 部署gitlab-runner 2. 注册gitlab-runner 搭 ...
随机推荐
- iOS APP打包上传到APPstore的最新步骤
一.前言: 作为一名iOS开发者,把辛辛苦苦开发出来的App上传到App Store是件必要的事.但是很多人还是不知道该怎么上传到App Store上 下面就来详细讲解一下具体流程步骤. 二.准备: ...
- nginx负载均衡tomcat和配置ssl
目录 tomcat 组件功能 engine host context connector service server valve logger realm UserDatabaseRealm 工作流 ...
- 条目十四《使用reserve来避免不必要的重新分配》
条目十四<使用reserve来避免不必要的重新分配> 使用vector和string的插入元素的时候,我们是不用担心内存问题的(只要不超过容器的max_size).因为底层有分配子管理内存 ...
- Linux 使用echo向文件末尾追加命令
//echo后边用单引号包围要添加的内容 echo 'add content'>>/home/data/test.sh 注意>>表示在原来的文件末尾上进行追加,如果使用的是&g ...
- LeetCode109. 有序链表转换二叉搜索树
109. 有序链表转换二叉搜索树 问题描述 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超 ...
- LeetCode记录之35——Search Insert Position
这道题难度较低,没有必要作说明. Given a sorted array and a target value, return the index if the target is found. I ...
- 【KMP】【矩阵加速】【递推】洛谷 P3193 [HNOI2008]GT考试 题解
看出来矩阵加速也没看出来KMP…… 题目描述 阿申准备报名参加 GT 考试,准考证号为\(N\)位数\(X_1,X_2…X_n(0\le X_i\le9)\),他不希望准考证号上出现不吉利的数 ...
- P4219 [BJOI2014]大融合
传送门 动态维护森林 显然考虑 $LCT$ 但是发现询问求的是子树大小,比较不好搞 维护 $sum[x]$ 表示节点 $x$ 的子树大小,$si[x]$ 表示 $x$ 的子树中虚儿子的子树大小和 那么 ...
- HDU 6357.Hills And Valleys-动态规划(区间翻转l,r找最长非递减子序列)
题意:给一串由n个数字组成的字符串,选择其中一个区间进行翻转,要求翻转后该字符串的最长非降子序列长度最长,输出这个最长非降子序列的长度以及翻转的区间的左右端点 #include<bits/std ...
- 112th LeetCode Weekly Contest Validate Stack Sequences
Given two sequences pushed and popped with distinct values, return true if and only if this could ha ...