• GitLab-CI GitLab-Runner 持续集成


    背景环境

    环境 版本 备注
    windows 10
    vagrant 2.0 这玩意儿做开发时挺好玩,可以单独写一篇博文
    CentOS 7.2

    早前我用的是 Gitlab 中的 WebHooks 解决解决发布的问题,但是需要自己搭建很多东西还要专门为此写脚本,在研究 Gitlab 中发现原来早就帮我们做好这些事情,只是没有发现而已

    Gitlab-CI 简介

    Gitlab-CI 顾名思义就是配合gitlab使用的一套可持续集成系统 (Continuous Integrations) ,8.0以后内部集成并默认开启。

    Gitlab-Runner 简介

    Gitlab-Runner 是配合 Gitlab-CI 的一套工具,Gitlab-CI 负责项目的构建任务调度,Gitlab-Runner 负责具体的脚本任务执行

    两者之间的关系和区别

    image

    image

    Pipline

    • pipline 在分支版本根目录的 .gitlab-ci.yml 文件中定义
    • 版本的每一次更新 即 commit 或 merge 行为都会触发 pipline
    • 一次pipline的执行相当于一次构建任务
    • 构建任务包含 安装依赖、单元测试、编译、打包、部署到服务器等行为

    Stages

    • 一个pipline 有多个 阶段(stage)这些阶段是串行执行的,比如 build -> test -> deploy
    • 默认任何一个阶段执行失败或异常整个pipline即中断

    Jobs

    • 每一个阶段(stage)都包含多个 任务(job)
    • 这些任务是并行执行
    • 所有 job 成功执行 这个 stage 才算是成功执行,换言之如果job失败了那么stage失败即pipline失败

    他们之间的关系,如图所示

    image

    在宿主机上安装 Gitlab-Runner

    宿主机不一定是生产服务器,我们可以在伺服上配置 Gitlab-Runner 让 Runner 完成所有的构建任务后发布代码到目标服务器。由于我这边做的是PHP开发没有编译、打包等过程,直接拉去代码等简单操作即可,所以将 gitlab-runner 部署在目标服务器上了。

    具体安装教程,参照官方文档

    以下是本人安装以及配置的过程,全程以root身份安装和配置

    # CentOS 7
    curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
    
    # 安装
    yum install -y gitlab-runner
    
    # 如果提示出现错误
    # Delta RPMs disabled because /usr/bin/applydeltarpm not installed. yum install deltarpm
    # 另外如果出现 No Presto metadata available for base. 的话 try yum provides '*/applydeltarpm' 然后 yum install deltarpm
    
    # 注册宿主runner
    gitlab-runner register
    
    # 启动
    systemctl start gitlab-runner.service
    
    # 填写注册信息
    url
    token
    description  # 描述
    tags         # 如果填写 tag 那么 yaml 配置文件必须制定了tag才能使用这个runner
    executor     # 执行容器 一般为 shell 
    
    # 如果默认用 root 用户 register 那么 配置文件在 /etc/gitlab-runner/config.toml
    # 如果是其他用户 register 配置文件在 ~/.gitlab-runner/config.toml
    
    

    全程以 root 身份操作是不推荐的

    gitlab-runner register 后的配置文件是写入 /etc/gitlab-runner/config.toml 中的,Gitlab-Runner 的是以 gitlab-runner 身份运行的,而我的 NginxPHP-fpm 是以 www:www 身份运行的,web 的目录也是 www:www 这样会出现权限问题,并且通过组和其他方式都不能完美解决问题,不如直接用 www 身份执行部署任务。

    注册后 runner 后的配置文件存放在 ~/.gitlab-runner/config.toml

    简单的前台调试用www运行gitlab-runner

    # 前台运行
    gitlab-runner run -u www # 以 www 身份运行
    

    使用 www 身份后台执行 gitlab-runner 服务

    # 后台执行
    
    # gitlab-runner 有 install、uninstall、start、stop、restart、status
    # 这6个命令就是和服务相关的
    
    # 停止服务
    systemctl stop gitlab-runner.service
    
    # 卸载旧有的服务包括 root 创建的 runner 服务
    gitlab-runner uninstall -n gitlab-runner
    
    # 用www身份安装服务
    gitlab-runner install -u www -d /home/www -c "/home/www/.gitlab-runner/config.toml"
    # -u 运行身份
    # -d 构建时的工作目录
    # -c register 后的配置文件存放路径
    
    # 运行服务 便是 www 身份
    gitlab-runner start
    
    # 查看
    ps aux | grep gitlab-runner
    
    # root      4431  0.4  2.1  55804 13488 ?        Ssl  15:31   0:00 
    # /usr/bin/gitlab-runner run 
    # --working-directory /home/vagrant 
    # --config /etc/gitlab-runner/config.toml 
    # --service gitlab-runner 
    # --syslog 
    # --user www
    
    
    

    .gitlab-ci.yml 文件的配置

    关于 yaml (Yet Another Markup Language) 具体请 Search 一下

    # .gitlab-ci.yml
    
    # 阶段,串行执行,失败则终止执行
    stages:
      - deploy
    
    # 具体任务,必须指定 阶段(stage)
    # 并列执行,只有全部成功执行该 stage 才会进入下个阶段
    publish:
      stage: deploy
      tags:        # register 时绑定的 tags
        - dinglc_wap_test 
      only:        # 特定版本分支才会执行
        - develop
        - master
      script:      # 具体执行的脚本,串行执行,失败则终止
        - whoami
        - bash /webservice/shell.sh
    

    参考

    GitLab-CI与GitLab-Runner

  • 相关阅读:
    「自己开发直播」实现nginx-rtmp-module多频道输入输出与权限控制
    抢购代码留存
    抢红包代码留存
    Table '' is marked as crashed and should be repaired 解决方法
    extundelete实现Linux下文件/文件夹数据恢复!
    RedHat设置Yum源
    MFC 自定义消息
    单例模式
    工厂模式(转)
    hash_map
  • 原文地址:https://www.cnblogs.com/dongyanglv/p/7710700.html
Copyright © 2020-2023  润新知