美文网首页gitlab runner
[后端] gitlab-ci 实现自动部署项目到服务器上

[后端] gitlab-ci 实现自动部署项目到服务器上

作者: 取个名字浩男 | 来源:发表于2019-01-02 15:32 被阅读0次

       gitlab有webhook和gitlab-ci实现自动部署,我这边选择了gitlab-ci搭建自动部署(能过通过shell的运行实现更多的运维等操作), 因为是刚开始接触这个自动部署的实现  所以暂时通过 宝塔中的gitlab来实现,后期会再发布一篇关于 oneinstack环境下实现的高版本gitlab实现自动部署的文章,尽情期待!

    步骤:

        1、因为我是使用宝塔安装的gitlab8.8.5版本 所以安装gitlab这一部分 大家在简书中搜索,有很多.(注意!, gitlab-runner 有对应的版本的,请选择对应版本,否则安装会失败),我这里安装的是 gitlab-runner 1.11.2  centos7.3下部署

        2、下载gitlab-ci-multi-runner 1.11.2

              $ sudo wget  https://gitlab-ci-multi-runner-downloads.s3.amazonaws.com/v1.11.2/binaries/gitlab-ci-multi-runner-linux-amd64

              给这个文件权限

              $ sudo chmod +x    ./gitlab-ci-multi-runner-linux-amd64

        3、创建一个centos用户

                sudo useradd --comment 'GitLab Runner' --create-home  gitlab-runner --shell  /bin/bash

        4、注册一个ci (在 gitlab-ci-multi-runner-linux-amd64 文件所在目录下执行如下命令)

                sudo  ./gitlab-ci-multi-runner-linux-amd64  register

                按照如下配置:

    配置过程中的选项参数选择 url和token是在要部署的项目中获取,不同项目获取不同的token但url则相同

        5、安装并作为服务启动

                sudo gitlab-ci-multi-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner  (加黑部分为指定build文件夹目录存放位置)

                sudo gitlab-ci-multi-runner start

        6、开放对应项目目录权限给 gitlab-runner用户(我这里是php项目组 所以统一将所有php相关项目放到了php目录,这里修改为你们自己的项目总目录或者单独目录都可以)

            sudo chown -hR gitlab-runner:gitlab-runner  /www/wwwroot/php

        7、接下来就是重点了!

            在centos中 进入到gitlab-runner用户  生成ssh 实现免登陆 克隆或者拉取项目代码,命令如下:

            $ su gitlab-runner

            $ mkdir ~/.ssh

            $cd~/.ssh

            $ ssh-keygen

            # 提示输入一直按回车默认就可以了

            $ cat id_rsa.pub  然后将 ssh内容复制下来, 粘贴到 gitlab编辑中的部署密钥,如下图

    部署密钥图

    8、在gitlab 注册一个gitlab-runner用户 然后将该用户 加入到需要自动部署的项目中(加入项目成员中)

    9、接下来就是自动部署时 执行的shell脚本的编写了,命令如下

        su gitlab-runner

        cd ~

        mkdir bin

        cd bin/

        vim deployscript

        内容如下图:

    简易自动部署shell脚本

                上图是 代码自动拉取的 shell代码,$1 $2 $3 $4 分别代表: 

                    $1 : php(项目所属群组, 比如说公司有php和java 那么php放在php群组 java则放在java群组 这样的话项目管理就很方便了)

                    $2: 项目名称,

                    $3: git分支名称 推荐 develop分支

                    $4: 当前job名称 这里为 job1

    10、给予 deployscript文件执行权限 (4 2 1 中的1 也就是 x)

                chmod +x deployscript

    11、接下来就是 配置(/home/gitlab-runner/bin)环境变量了,用于不用每次执行 bin下的脚本时 都指定 /home/gitlab-runner/bin 这个目录 也考虑到安全吧(这一块不是很懂哈,萌新在此!)  如下图:

                命令如下:

              gitlab-runner用户下

                    su gitlab-runner

                    cd ~

                    vim .bash_profile

                    PATH修改为如下:

                        PATH=$PATH:$HOME/.local/bin:$HOME/bin:/home/gitlab-runner/bin    (加黑加粗部分为修改内容)

                    保存退出  执行 source  .bash_profile (环境变量即为生效)

                root用户下:

                vim /etc/profile

                    在底部修改 PATH为:

                        export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/git/bin:/home/gitlab-runner/bin

                    保存退出  执行 source /etc/profile

    环境变量添加

    ## 注意! ##

    所有的项目 都是在 php群组 中创建  如果没有php群组  创建一个即可
    之后的项目都在php群组下 创建!!!

    12、针对于tp或者laravel 拉取代码后 composer install 之后 vendor目录 此时的拥有者为 root 需要修改为 gitlab-runner否者后期想实现自动composer install /update时  会因为没有权限执行不了

            chown -R gitlab-runner:gitlab-runner  vendor/  (root用户下执行)

    13、接下来就是 gitlab-ci.yml文件的编写了,如下:

    # Author:xuweitao 2019-05-07 01:22:00

    # php项目:GitLab-CI自动执行脚本

    #

    # https://www.jianshu.com/p/c566265d39de

    # /home/gitlab-runner/bin

    variables:

      G_LARAVEL_INIT: 'true'

    stages:

      - deploy

      - laravel-init

      - composer-install

    job1:

      # 代码自动更新部署 运行shell脚本

      stage: deploy

      only:

        - develop

      script:

        - deployscript php $CI_PROJECT_NAME $CI_COMMIT_REF_NAME $CI_JOB_NAME1

    job2:

      # 队列开启 & 项目初始化(vender目录跟 storage以及软连接等的执行和授权,注意: 项目初始化之前 请确保先执行了 composer install操作!!!)  运行shell脚本

      stage: laravel-init

      only:

        - develop

      variables:

        B_LARAVEL_init: 'false'

        B_LARAVEL_QUEUE: 'false'

      script:

        - laravel-init php $CI_PROJECT_NAME $B_LARAVEL_init $B_LARAVEL_QUEUE $CI_JOB_NAME2

    job3:

      # composer install  运行shell脚本

      stage: composer-install

      only:

        - develop

      variables:

        B_COMPOSER_INSTALL: 'false'

      script:

        - composer-install php $CI_PROJECT_NAME $B_COMPOSER_INSTALL $CI_JOB_NAME3

        step13 参数介绍: 

            php  表示 gitlab 群组名称,也就是所有的php项目 都放在php群组方便管理 我代码也是基于这个群组实现!

             $CI_PROJECT_NAME 表示当前项目名称 (需要在对应的项目 变量里面添加)

            $CI_COMMIT_REF_NAME 表示当前代码默认推送到git那个分支   默认为develop分支 (需要在对应的项目 变量里面添加)

            $CI_JOB_NAME1 、$CI_JOB_NAME2 、$CI_JOB_NAME3  手动添加job1、job2、job3名称   (需要在对应的项目 变量里面添加)

    (由于是gitlab 8.8.5 版本太低  不会自动给我们添加 job1~3  等变量 所以需要自己在对应的项目添加一边!)

    yml变量

    参考链接: https://www.jianshu.com/p/b1e098cdb46b

    参考链接: https://www.jianshu.com/p/df433633816b

    参考链接: https://www.cnblogs.com/whoamme/p/4039998.html

    最后再说一句: 新建一个项目的时候, 只需要在 对应的群组(我这里是 php群组) 中创建新的项目操作步骤:
        (1)、点击新项目设置 -> runner ->然后按照上面的 第4点 执行   
        (2)、将gitlab-ci.yml原封不动复制一封放到新项目根目录即可

    总结: 过程总会遇到坑的,这时候就得看你解决问题的能力了。先通过报错去尝试修改 实在不行再进行百度/谷歌。 关于shell脚本 我就不全部贴出来了  毕竟该走的坑还是要走一边。 通过这个实例  也了解了shell的一些基础语法和使用  收获还是满大的。

    相关文章

      网友评论

        本文标题:[后端] gitlab-ci 实现自动部署项目到服务器上

        本文链接:https://www.haomeiwen.com/subject/dtjzlqtx.html