本文檔用戶指導新手如何部署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