gitlab runner

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

2019-01-02  本文已影响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的一些基础语法和使用  收获还是满大的。

上一篇下一篇

猜你喜欢

热点阅读