引言
本文檔用戶指導新手如何部署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'] = 8899
-
配置Unicorn端口
GitLab還集成了Unicorn插件,默認端口與是8080,如果該端口被占用,則要修改端口,將 ‘unicorn['port'] = 8080’ 解注釋, 再修改其端口,以 8988端口為例
unicorn['port'] = 8988
-
保存配置
配置文件修改后,保存不是立刻生效的,還需要命令去修改
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.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 $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
- 為GitLab倉庫添加webhook
第一次測試webhook會報錯,提示先提交一次,字面意思,就先push一次
提交文件
- 使用git命令提交修改和新增的內容,push后可查看結果
查看結果
-
在Jenkins可查看到構建記錄

-
打開Nginx,可訪問到該文檔

Calibre插件安裝
GitBook不自帶轉PDF功能,需要安裝Calibra
- 升級libGL
安裝Calibre會遇到如下錯誤:
ImportError: /lib64/libGL.so.1: 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
