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

   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的一些基础语法和使用  收获还是满大的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容