4. GitLab Runner介绍
目前就自己的感觉而言,gitlab的runner和jenkins的agent是一个概念,是一个用来安装到各种系统上的软件包,安装好了以后,能够从项目的CI/CD管道里读取任务到机器上去执行,执行完成后,将结果返回。一般执行的任务都是用来编译打包,这种方式可以同时在多个机器上并行处理多个任务,提高CI/CD的效率。
Gitlab的Runner是一个使用Go语言编写的开源软件,能够运行在目前常用的平台上,例如:
- Linux/Unix
- Windows
- MacOS
- Kubernetes
等等,在Linux上还支持多种不同的发行版。让runner的扩展变得更加容易。
GitLab Runner提供的特性
-
同时运行多个任务(只要硬件支持)
-
多个服务器对应多个token(甚至每个项目一个,token的作用下面会讲解)
-
单个token可以限制并发运行的任务数量
-
任务可以在以下环境里运行
-
本地
-
Docker容器里
-
通过SSH在Docker容器上
-
在不同的云和虚拟化环境里动态缩放的Docker容器里
-
连接到远程的SSH服务器上
-
以Go语言编写,只有一个二进制文件,不需要其他依赖。安装和使用简单
-
可以支持多平台(上面讲过)
-
运行自定义任务的运行环境
-
可以启用Docker容器缓存
-
内嵌Prometheus 指标HTTP服务器
GitLab Runner版本的选择
为了兼容性期间,Runner的版本一般要和部署的Gitlab版本一致,毕竟从架构上看,Gitlab类似于服务端,Runner类似于客户端,如果两端版本不一致,可能会导致一些意料之外的错误。
Runner的注册
将Runner在选择的机器上安装好了以后,需要将Runner注册到你部署的Gitlab上,这样Gitlab才能知道有多少管理的Runner,同时Runner也能根据CI/CD里的配置(具体什么配置会在.gitlab-ci.yaml文件里讲到)来选择自己对应的任务去执行。
执行器(Executor)
Runner根据CI/CD上的配置选择自己对应的任务,将任务内容读取到它所在的机器上。但是实际执行任务的并不是Runner,它只负责取任务并在任务执行成功或者失败的时候,返回对应的结果。实际执行任务的是执行器(Executor),执行器是一个造出来的概念,实际上就是机器上的shell,例如linux上的bash shell、Windows上的PowerShell等。因为在CI/CD的任务里面,无非也都是代码编译、打包,而编译打包的命令都来自shell环境。而在注册Runner的时候,会要求你为这个Runner选择一个执行器,即这个Runner可以提供一个什么样的shell环境让你运行命令。因此Bash Shell 类型的Runner只能运行bash命令,如果你给它传一个powershell的命令,就直接报错。
Runner的类型
在注册之前,需要确认Gitlab上谁有权限访问它,而这个权限是根据Runner的类型来确定的,目前Gitlab里的Runner类型有:
- 共享Runner(Shared Runner),所有项目可以使用
- 群组Runner(Group Runner),特定群组里的所有项目和子群组可以使用
- 特定Runner(Specific Runner),用于独立的项目。
当你在注册Runner的时候,你需要为Gitlab实例、群组或项目指定一个Token,这个Token用于告诉Runner,谁可以使用它。
标签(Tags)
注册runner的时候,可以给它添加一个标签。添加标签以后,就可以在CI/CD配置文件里,通过标签来调用特定的Runner,如下所示:
job:
tags:
- ruby
上面的内容是一个.gitlab-ci.yaml里的job内容,调用带有ruby标签的Runner。
配置Runner
Runner会带有一个config.toml
配置文件,在Linux系统安装中,它位于 目录下。这个文件里可以为特定Runner添加配置,也可以为所有Runner添加配置。可以指定想日志或缓存这些配置,还可以设置并发、内存、CPU限制等等。
使用Runner
在Runner安装并注册完毕,且配置的Runner类型在你的项目中可以使用的话,那么就可以直接在CI/CD的配置文件.gitlab-ci.yaml文件里通过Runner的名称或者标签来直接调用它。当你往仓库里提交代码后,就会触发流水线运行,然后runner的执行器就会处理对应任务里的命令。
Runner的执行流程
下面的图片演示了Runner怎么注册,以及是怎么请求任务和处理任务的。也展示了那个动作使用注册、认证和任务token,如下所示:
show.png
从上面图片中可以看到,具体的流程是:
- Runner向/api/v4/runners发送POST请求,请求里带有注册Token
- 注册成功后返回runner_token
- Runner通过循环向/api/v4/rquest发送POST请求,请求里带上runner_token
- 认证通过后接口返回带有任务信息的payload和任务相关的job_token
- 然后将任务信息发送给执行器,执行器使用job_token来
- 克隆所需的代码
- 下载配置或组件
- 执行器执行完成后,返回任务输出和任务状态信息
- Runner向GitLab返回任务输出、任务状态以及job_token
以上就是GitLab Runner的基本知识。