• 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
  • 相关阅读:
    httpClient-3.1学习笔记
    HTTP Header 详解
    Java:对象的强、软、弱和虚引用
    Spring @ResponseBody 返回乱码 的优雅解决办法
    Spring MVC 返回类型为字符串时, 返回中文变成"?"处理
    GroupVarint
    Format
    DynamicConverter
    Thread pools & Executors
    Futures
  • 原文地址:https://www.cnblogs.com/HuangWj/p/9254711.html
Copyright © 2020-2023  润新知