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