Skip to content

GitLab Runner 导读

与 GitLab 配套的 CI/CD 解决方案,支持 kubernetes、docker、shell 等等执行器

文档

  1. GitLab CI/CD
    1. GitLab CI/CD 入门
      1. CI/CD 概念

图解

runner


runner

说明

  1. GitLab Runner 是专为 GitLab 设计的流水线:持续集成(CI)持续交付(CD)持续部署(CD) ,中文文档:GitLab CI/CD

  2. GItLab Runner 可选执行器:custom, virtualbox, docker-ssh+machine, docker, docker-ssh, parallels, shell, ssh, docker+machine, kubernetes

  3. 统计

    时间GitLab RunnerGitHub Actions
    2023-03-1439亿次(不含自建GitLab)77亿次
    2023-05-0642亿次(不含自建GitLab)87亿次
    2023-07-0345亿次(不含自建GitLab)98亿次
    2023-08-2849.7亿次(不含自建GitLab)162.9亿次
  4. GitLab Runner 的作用类似于 Jenkins,不同之处在于(由于本人知识有限,错误和不足请在评论中指正):

GitLab RunnerJenkins
任务触发前提基于 GitLab 代码托管平台触发基于 Webhook 触发,与代码平台无关
触发精确度1. 按照文件变更时进行触发
2. 排除指定文件不触发
3. 触发规则可编程控制
4. 完全支持右侧以 GitLab 作为代码仓库为例的 Webhook 触发事件
基于 Webhook 触发(受代码管理平台的 Webhook 触发时机限制)
以 GitLab 作为代码仓库为例的 Webhook 触发事件:
1. 推送事件
2. 评论
3. 私密评论
4. 议题事件
5. 私密议题事件
6. 合并请求事件
7. 作业事件
8. 流水线事件
9. Wiki页面事件
10. 部署事件
11. 功能标志事件
12. 发布事件
与代码托管平台之间通讯方式主动与代码托管平台通讯(GitLab Runner 需要能连接到 GitLab基于 Webhook 被动与代码托管平台通讯(代码托管平台需要能连接到 Jenkins
多机器部署方案机器数量随意拓展,随意使用(不同机器使用不同的 tags 标签区分与选择)方案1:不同机器部署不同的 Jenkins 并需要单独管理
方案2:使用k8s
方案3:未知
多机器流水线共享支持基于 Webhook 地址,不支持
执行器custom, virtualbox, docker-ssh+machine, docker, docker-ssh, parallels, shell, ssh, docker+machine, kubernetes未知
多项目流水线相互触发支持,简单未知
优势与代码管理仓库在同一个平台,方便管理仅依赖于 Webhook,与代码管理仓库类型无关
缺点必须使用 GitLab 作为代码管理(自建或使用第三方提供)部署时需要使用 ssh 连接到要部署的机器(多机器部署,不可能每台机器都安装 Jenkins)
复杂任务编排支持,简单未知
定时任务支持支持
任务日志储存支持,记录在 GitLab 中,执行日志长期储存,不会自动删除,跟随 GitLab 数据备份自行安装组件备份,备份文件过大(可能包含工作空间),需要自己管理
产物储存支持,记录在 GitLab 中,默认记录30天,可自定义,可随时设置为长期储存,跟随 GitLab 数据备份未知
复杂流水线相关产物使用支持未知
流水线任务代码写在代码仓库中,跟随代码仓库一生可以写在代码仓库中,也可以写在 Jenkins 中(无法有效追踪全部历史记录)
任务失败后处理GitLab 会给任务相关人员(提交代码、触发任务等人)发送邮件未知
是否允许任务失败允许,可自定义未知
任务环境变量丰富,可自定义,支持流水线级别的变量,支持任务级别的变量未知
流水线是否支持全局环境变量支持未知
流水线是否支持将一段代码抽取成变量的形式去引用支持,GitLab Runner 中称之为锚点未知
是否支持git子模块支持未知
流水线嵌入1. 支持嵌入本项目的其他文件作为流水线(流水线可写在多个文件中进行分类管理,不必一定要写在单个文件中)
2. 支持嵌入其他项目的文件作为流水线(一类项目使用的公共流水线单独拿出来,方便管理)
未知
流水线缓存支持,可上传到多种储存方式上(如:S3、各种云厂商提供的对象储存中),方便共享流水线(不同机器可执行同一个项目的流水线)使用,支持正则表达式匹配文件进行缓存单台服务器使用
多任务流水线缓存是否可分开储存支持未知
流水线控制仓库发布支持未知
流水线语法验证支持,在 GitLab 中的流水线编辑器进行实时验证不支持
流水线命令与执行结果以不同的方式展示,命令为绿色字体,结果为白色字体未知
是否支持查看产物具体文件内容任务存在多个文件作为产物时,可以直接下载所有文件的压缩包,可以直接查看具体文件,可以直接下载某个文件未知

参考资料

  1. 多项目流水线相互触发:如果 A 服务使用了 B 组件,当 B 组件流水线执行完成时,控制 A 服务执行流水线。用于保证服务使用的组件时刻保持为最新,省去了人力成本
  2. 复杂流水线相关产物使用:后一个任务使用前一个任务的产物
  3. 流水线是否支持将一段代码抽取成变量的形式去引用:GitLab Runner 中称之为 锚点