本文档用户指导新手如何部署GitLab+Jenkins自动化构建GitBook,并使用Nginx发布资料。在部署过程当中,如遇到任何问题,请自行百度。html
注意: 此文章的环境和数据,仅为用于调试的片断,极可能有版本,路径不一致等状况,请部署者没必要过于考究其中的细节。node
如下教程使用的环境以下:python
环境 | 版本 |
---|---|
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 |
官网:https://about.gitlab.com/installation/linux
官网有针对各系统的安装教程,很详细,这里主要拿CentOS 6来讲nginx
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软件包库git
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
安装GitLabweb
sudo yum -y install gitlab-ee
GitLab包含了众多插件,要配置端口等信息,打开/etc/gitlab/gitlab.rbnpm
vim /etc/gitlab/gitlab.rb
配置外部URLjson
默认状况下,外部URL为 'http://gitlab.example.com' ,这个域名外部是没法访问的,除非你作了映射,若是不想作什么映射,直接将该域名改为本机IP:Nginx_port,以8.5为例vim
external_url 'http://192.168.8.5'
配置Nginx端口
GitLab集成Nginx插件,默认端口与是80,若是该端口被占用,则要修改端口,修改的端口与要和外部URL端口相同,否则会引发git没法使用http/https,将 ‘nginx['listen_port'] = 80’ 解注释, 再修改其端口,以 8899
端口为例
nginx['listen_port'] = 8899
配置Unicorn端口
GitLab还集成了Unicorn插件,默认端口与是8080,若是该端口被占用,则要修改端口,将 ‘unicorn['port'] = 8080’ 解注释, 再修改其端口,以 8988端口为例
unicorn['port'] = 8988
保存配置
配置文件修改后,保存不是马上生效的,还须要命令去修改
gitlab-ctl reconfigure
若是系统还开了防火墙,可能会致使后台访问不到,要关闭防火墙,或者设置过滤端口,如下选择关闭防火墙比较方便,若是选择端口设置,则须要看哪一个端口要使用,再去设置
service iptables stop
本地配置完成后,还须要登陆后台配置
http://gitlab_url:nginx_port
登录用户名为 root,密码为刚刚设置的
http://'gitlab_url:nginx_port'/admin/application_settings
用如下命令生成rsa密钥
ssh-keygen -t rsa
将生成的公钥复制到GitLab中
直接在官网上下载,选择相应系统版本的安装包,以我下载的 “jenkins-2.121.1-1.1.noarch.rpm” 为例。
rpm -ivh jenkins-2.121.1-1.1.noarch.rpm
Jenkins默认端口为8080,若该端口被占用,可经过修改"/etc/sysconfig/jenkins"文件中的 JENKINS_PORT 字段的值达到修改端口的目的
Jenkins安装后,做为服务而存在,经过调用服务启动的命令去启动
service jenkins start
Jenkins构建须要使用Jenkins用户去执行命令,调用sudo命令去执行命令,须要面输入密码,则须要添加jenkins用户免密执行sudo权限,在 /etc/sudoers 文件中文件底部追加
jenkins ALL=(ALL) NOPASSWD:ALL
本地配置完成后,还须要登陆后台配置
http://jenkins_url:port
第一次打开后台须要解锁,界面有提示
安装推荐插件并等待安装完成
建立一个管理员帐户,也可继续使用admin帐户,我选择了后者
建立url,直接保存下一步
设置Jenkins可访问
此设置可解决GitLab访问Jenkins 403错误
在nodejs官网上下载,而后解压并编译安装
./configure make make install
使用npm安装gitbook
npm install gitbook-cli -g
GitBook包含众多插件,有些功能须要插件支持,这里就展现要用到的几个插件的安装,其余插件可自行百度。
插件的安装分两步
gitbook install
npm安装
npm install gitbook-plugin-tbfed-pagefooter
在gitbook工程下安装
gitbook install
在官网上下载Nginx后,解压并进入解压目录调用命令安装
./configure make make install
直接调用nginx命令启动
nginx
PS: 没有安装Gitlab Hook Plugin就没办法和gitlab使用webhook
没有安装Build Authorization Token,后面gitlab在Test hook时会报403错误
没有Gitlab Plugin就没办法构建Gitlab触发器
建立GitLab仓库
建立Jenkins工程
构建脚本
gitbook_build(){ cd $1 sudo gitbook install sudo gitbook build cd .. } mv_nginx() { sudo mkdir -p /opt/nginx/html/${JOB_NAME}/$1 sudo cp -af $1/_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
第一次测试webhook会报错,提示先提交一次,字面意思,就先push一次
在Jenkins可查看到构建记录
打开Nginx,可访问到该文档
GitBook不自带转PDF功能,须要安装Calibra
安装Calibre会遇到以下错误:
ImportError: /lib64/libGL.so.1: undefined symbol: drmFreeDevice
须要先升级libGL,以本文的环境为例,仅须要使用yum升级便可
yum update libGL
官网有安装教程,很简单,但要求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为例
gitbook pdf
gitbook pdf . mybook.pdf