什么是 gitlab runner
Posted
技术标签:
【中文标题】什么是 gitlab runner【英文标题】:What is gitlab runner 【发布时间】:2018-04-27 03:09:34 【问题描述】:我认为我从根本上错过了一些东西。我是 CI/CD 新手,正在尝试使用 gitlab 设置我的第一个管道。
该项目是一个预先存在的 php 项目。
我还不想清理它,目前我已经将整个东西推到了一个 docker 容器中,它运行良好,可以与谷歌云的 mysql 数据库等进行通信,因为它应该在本地和远程谷歌上云测试虚拟机。 梦想是能够推送到开发分支,然后将开发分支合并到测试分支中,然后触发自动化测试(简单的部分),并导致远程测试虚拟机(托管在谷歌云上),拉最新更改,从最新的 docker 文件重建镜像(或从 gitlab 镜像寄存器中拉取最新的镜像)...然后用最新的镜像重建容器。
我正在玩 gitlab 的跑步者,但我不明白它的实际用途,尽管浏览了几乎所有的在线内容。 我只是将它安装在谷歌云虚拟机中,然后当我从我的开发机器推送到 gitlab 时.. repo 将“向”运行器(在虚拟机上运行)发出“信号”,以执行一堆脚本(可能包括git pull 最新的变化?)。
因为我已经在本地将我的应用程序预打包到一个容器中(并将图像推送到图像注册表),我是否需要使用 docker 作为我在运行器上的执行器?或者我可以只使用 shell 和 shell 中的命令吗?
我错过了什么?
TLDR 和其他:
问题:
跑步者实际上是为了什么, 它应该安装在哪里? 它是否关心它在哪个目录中运行? 如果它不在乎运行哪个目录, 它在哪里执行它的脚本命令?在根?
如果我在本地构建自己的图像并将它们上传到 gitlab 的注册表,
我需要将我的执行程序设置为 docker 吗?我不应该将它设置为外壳,拉取图像并构建它吗? (假设 runner 正在远程 VM 上运行)。
【问题讨论】:
【参考方案1】:跑步者究竟是为了什么?
您的项目连同一个.gitlab-ci.yml
文件。 .gitlab-ci.yml
定义您的 CI/CD 管道有哪些阶段以及每个阶段要做什么。这通常包括构建、测试、部署阶段。在每个阶段中,您可以定义多个作业。例如,在构建阶段,您可能需要在 debian、centos 和 windows 上构建 3 个作业(在 GitLab 词汇表中build:debian
、build:centos
、build:windows
)。 GitLab 运行者克隆项目,读取 gitlab-ci.yaml 文件并按照指示执行操作。所以基本上 GitLab runner 是一个 Golang
进程,它执行一些指令任务。
它打算安装在哪里?
您可以在此处列出的所需环境中安装运行器。 https://docs.gitlab.com/runner/install/ 要么 您可以使用已安装在 GitLab 基础架构上的共享运行器。
它是否关心它在哪个目录中运行?
是的。 runner 执行的每个任务都相对于https://gitlab.com/help/ci/variables/README 中定义的CI_PROJECT_DIR
。但是你可以改变这种行为。
它在哪里执行它的脚本命令?在根?
我需要将我的执行程序设置为 docker 吗?我不应该将其设置为 shell,拉取图像并构建它吗?
一个运行器可以有多个执行器,例如 docker、shell、virtualbox 等,但 docker 是最常见的一个。如果您使用 docker 作为执行程序,您可以从 docker hub 或您配置的注册表中提取任何图像,并且您可以使用 docker 图像执行大量 stff。在 docker 环境中,您通常以 root 用户身份运行它们。 https://docs.gitlab.com/runner/executors/README.html
【讨论】:
我认为这里的重点是:当有人推送提交或合并提交到主分支时,运行者如何知道它会缩短管道? gitlab如何触发runner?或者跑步者是否每隔一小时调用 api 到 gitlab 进行检查? 每个推送、合并和拉取请求都会发出事件。 Gitlab 监听它并启动 runner。这几乎是所有 CI/CD 工具,如 Github Action、Jenkins 等。【参考方案2】:查看gitlab访问日志,runner不断轮询服务器
【讨论】:
以上是关于什么是 gitlab runner的主要内容,如果未能解决你的问题,请参考以下文章