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'] = 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安裝

官網:https://jenkins.io/

直接在官網上下載,選擇相應系統版本的安裝包,以我下載的 “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安裝

官網:https://www.gitbook.com/

  • 安裝nodejs

在nodejs官網上下載,然后解壓並編譯安裝

./configure
make
make install
  • 安裝gitbook

使用npm安裝gitbook

npm install gitbook-cli -g

GitBook配置

GitBook包含眾多插件,有些功能需要插件支持,這里就展示要用到的幾個插件的安裝,其他插件可自行百度。

插件的安裝分兩步

  1. 用你npm安裝插件
  2. 在gitbook工程下,調用以下命令安裝
gitbook install
  • 頁腳插件tbfed-pagefooter

npm安裝

npm install gitbook-plugin-tbfed-pagefooter

在gitbook工程下安裝

gitbook install

Nginx安裝

官網:http://nginx.org/en/

  • 安裝

在官網上下載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插件安裝

官網:https://calibre-ebook.com/

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM