美文网首页
gitlab runner实现自动化部署

gitlab runner实现自动化部署

作者: AndreaH | 来源:发表于2020-03-02 11:31 被阅读0次

    前言

    GitLab Runner是一个开源的项目,是用来执行GitLab中的项目的根目录下创建的.gitlab-ci.yml 脚本的工具。GitLab-CI可以比喻成管理工人的工厂,Runner是工厂里的工人,每个工人需要在工厂进行注册,所负责的项目不同,所做的工作也不同。当工厂某一个项目发生变动时,需要通知对应的工人去做对应的工作。

    具体部署流程图

    deploy.png

    GitLab Runner简介

    1. Runner类型

    • Shared Runner:所有工程都能够用的,且只有系统管理员能够创建
    • Specific Runner:只有特定的项目可以使用。

    2. GitLab Runner中相关概念介绍

    • 管道(pipeline)
      每个推送到 Gitlab 的提交都会产生一个与该提交关联的管道(pipeline),若一次推送包含了多个提交,则管道与最后那个提交相关联,管道(pipeline)就是一个分成不同阶段(stage)的作业(job)的集合。

    • 阶段(Stage)
      阶段是对批量的作业的一个逻辑上的划分,每个 GitLab CI/CD 都必须包含至少一个 Stage。多个 Stage 是按照顺序执行的,如果其中任何一个 Stage 失败,则后续的 Stage 不会被执行,整个 CI 过程被认为失败


      image.png

      以图中所示为例,整个 CI 环节包含三个 Stage:build、test 和deploy。

    • build 被首先执行。如果发生错误,本次 CI 立刻失败;

    • test 在 build 成功执行完毕后执行。如果发生错误,本次 CI 立刻失败;

    • deploy 在 test 成功执行完毕后执行。如果发生错误,本次 CI 失败。

    下图是Gitlab对阶段和阶段状态的展示:


    stage.png
    stage-status.png
    • 作业(Job)
      作业就是运行器(Runner)要执行的指令集合,Job 可以被关联到一个 Stage。当一个 Stage 执行的时候,与其关联的所有 Job 都会被执行。在有足够运行器的前提下,同一阶段的所有作业会并发执行。作业状态与阶段状态是一样的,实际上,阶段的状态就是继承自作业的。
      关于job中详细的参数介绍,请移步https://docs.gitlab.com/runner/

    准备工作

    1. 准备gitlab 测试服务器,用于gitlab上的代码存储、CI等的配置
    2. 准备一台部署服务器,用于安装gitlab-ruuner并部署代码

    开始Go!

    1. 准备gitlab服务器,并创建一个项目

    gitlab.png

    2. 准备一台部署服务器,用于安装gitlab-ruuner并部署代码

    1. 在部署服务器上安装gitlab-runner

    # 安装gitlab-runner
    yum install gitlab-runner
    

    2. 向GitLab-CI注册gitlab-runner

    • 找到你的gitlab上存放的项目,找到settings-->CI/CD-->Runner


      runner-setting.png
      runner-setting2.png
    • 部署服务器上进行runner注册
    gitlab-runner register
    
    runner-register.png
    1. url:gitlab所在的测试服务器地址
    2. token:项目的token,用于关联runner和项目
    3. name:runner的名字,用于区分runner
    4. tags:用于匹配任务(jobs)和执行任务的设备(runners),此处不填直接回车时,默认Can run untagged jobs值为true
    5. executor:执行环境
    • 注册成功之后,我们就可以在gitlab的CI配置中看到刚才注册的runner了


      runner.png
    • 点开注册好的runner,可以看到具体配置内容
      runner-confige.png
      注意:如果你设置了Can run untagged jobs为No,那你需要在你gitlab-ci.yml文件中指定你要使用runner的tag,才能运行对应的runner,否则你任务可能一直在pending状态,找不到runner执行。

    3. 启动gitlab-runner

    • 前台启动
    gitlab-runner run
    
    • 后台启动(gitlab-runner service)
    gitlab-runner install
    gitlab-runner start
    

    4. 配置ssh免登录,用于将gitlab-runner服务器上获取到的文件拷贝到服务器

    1. 首先登陆服务器,进入gitlab-runner用户下生成一对公钥,私钥对。生成过程需要两次输密码,直接回车即可。
    ssh-keygen -t rsa -C  'your email@domain.com'
    
    1. 密钥默认保存位置在 ~/.ssh 目录下,打开后会看到私钥文件 id_rsa 和公钥文件 id_rsa.pub


      ssh.png
    2. 复制公钥到你的部署服务器上
    scp ~/.ssh/id_rsa.pub <用户名>@<Linux的ip地址>:/root/.ssh/id_rsa.pub
    
    1. 把公钥追加到服务器ssh认证文件中
    cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
    

    5.此后,从本地上传文件到服务器就不需要输用户名,密码了。
    5. 在gitlab中配置变量,用于.gitlab-ci.yml文件

    yum.png
    • 项目的根目录下编写.gitlab-ci.yml文件
    ##缓存 node_modules/目录 下次构建不会删除
    cache:
      paths:
      - node_modules/
    stages: # Stages 表示构建阶段,这里有两个阶段 install, deploy
      - build
      - deploy
    
    fetch: # Jobs 表示构建工作,表示某个 Stage 里面执行的工作。
      stage: build
      script:
        - echo "=====start build======"
        - npm i 
        - npm run build
        - echo "=====end build======"
      only:
        - master
      artifacts: 
        expire_in: 2 week
        paths: 
          - dist/
        
    deploy-static:
      stage: deploy
      script:
        - echo "=====start deploy======"
        - scp -r ./dist root@$DEPLOY_SERVER_DEV:$WEB_DIR
        - echo "=====end deploy======"
    

    6. 把.gitlab-ci.yml文件推送到gitlab仓储,触发流水线

    pipeline.png
    • 点击每次构建状态,可以查看构建详情,如果有错误的话可以点开构建阶段,查看错误详情。


      deploy-error.png
    deploy-pass.png
    7. 到此,我们已经完成了一套完整对自动化部署,之后只有gitlab仓库有代码更新,就可以触发流水线了

    相关文章

      网友评论

          本文标题:gitlab runner实现自动化部署

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