--- sidebar_position: 2 --- # GitLab Runner 导读 1. GitLab Runner 是专为 GitLab 设计的流水线:`持续集成(CI)`、`持续交付(CD)`、`持续部署(CD)` ,中文文档:[GitLab CI/CD](https://docs.gitlab.cn/jh/ci/index.html) 2. GItLab Runner 可选执行器:custom, virtualbox, docker-ssh+machine, docker, docker-ssh, parallels, shell, ssh, docker+machine, kubernetes 3. 统计 | 时间 | [GitLab Runner](https://gitlab.com) | [GitHub Actions](https://github.com) | |------------|-------------------------------------|--------------------------------------| | 2023-03-14 | 39亿次(不含自建GitLab) | 77亿次 | | 2023-05-06 | 42亿次(不含自建GitLab) | 87亿次 | | 2023-07-03 | 45亿次(不含自建GitLab) | 98亿次 | 4. GitLab Runner 的作用类似于 Jenkins,不同之处在于(**由于本人知识有限,错误和不足请在评论中指正**): | | GitLab Runner | Jenkins | |---------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 任务触发前提 | 基于 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 | 未知 | | 多项目流水线相互触发1 | 支持,简单 | 未知 | | 优势 | 与代码管理仓库在同一个平台,方便管理 | 仅依赖于 Webhook,与代码管理仓库类型无关 | | 缺点 | 必须使用 GitLab 作为代码管理(自建或使用第三方提供) | 部署时需要使用 ssh 连接到要部署的机器(多机器部署,不可能每台机器都安装 Jenkins) | | 复杂任务编排 | 支持,简单 | 未知 | | 定时任务 | 支持 | 支持 | | 任务日志储存 | 支持,记录在 GitLab 中,执行日志长期储存,不会自动删除,跟随 GitLab 数据备份 | 自行安装组件备份,备份文件过大(可能包含工作空间),需要自己管理 | | 产物储存 | 支持,记录在 GitLab 中,默认记录30天,可自定义,可随时设置为长期储存,跟随 GitLab 数据备份 | 未知 | | 复杂流水线相关产物使用2 | 支持 | 未知 | | 流水线任务代码 | 写在代码仓库中,跟随代码仓库一生 | 可以写在代码仓库中,也可以写在 Jenkins 中(无法有效追踪全部历史记录) | | 任务失败后处理 | GitLab 会给任务相关人员(提交代码、触发任务等人)发送邮件 | 未知 | | 是否允许任务失败 | 允许,可自定义 | 未知 | | 任务环境变量 | 丰富,可自定义,支持流水线级别的变量,支持任务级别的变量 | 未知 | | 流水线是否支持全局环境变量 | 支持 | 未知 | | 流水线是否支持将一段代码抽取成变量的形式去引用3 | 支持,GitLab Runner 中称之为锚点 | 未知 | | 是否支持git子模块 | 支持 | 未知 | | 流水线嵌入 | 1. 支持嵌入本项目的其他文件作为流水线(流水线可写在多个文件中进行分类管理,不必一定要写在单个文件中)
2. 支持嵌入其他项目的文件作为流水线(一类项目使用的公共流水线单独拿出来,方便管理) | 未知 | | 流水线缓存 | 支持,可上传到多种储存方式上(如:S3、各种云厂商提供的对象储存中),方便共享流水线(不同机器可执行同一个项目的流水线)使用,支持正则表达式匹配文件进行缓存 | 单台服务器使用 | | 多任务流水线缓存是否可分开储存 | 支持 | 未知 | | 流水线控制仓库发布 | 支持 | 未知 | | 流水线语法验证 | 支持,在 GitLab 中的流水线编辑器进行实时验证 | 不支持 | | 流水线命令与执行结果 | 以不同的方式展示,命令为绿色字体,结果为白色字体 | 未知 | | 是否支持查看产物具体文件内容 | 任务存在多个文件作为产物时,可以直接下载所有文件的压缩包,可以直接查看具体文件,可以直接下载某个文件 | 未知 | ## 参考资料 1. 多项目流水线相互触发:如果 A 服务使用了 B 组件,当 B 组件流水线执行完成时,控制 A 服务执行流水线。用于保证服务使用的组件时刻保持为最新,省去了人力成本 2. 复杂流水线相关产物使用:后一个任务使用前一个任务的产物 3. 流水线是否支持将一段代码抽取成变量的形式去引用:GitLab Runner 中称之为 [锚点](https://docs.gitlab.cn/jh/ci/yaml/yaml_optimization.html#%E9%94%9A%E7%82%B9)