什么是GitLab Runner?

32

我觉得我基本上是漏了什么东西。我是CI/CD的新手,正在尝试使用gitlab创建我的第一个流水线。

该项目是一个现有的PHP项目。

我暂时不想对它进行清理,目前我已经将整个项目推到了docker容器中,并且在本地和远程google云测试VM上运行良好,与google云的mysql数据库正常通信等。 我的梦想是能够推送到开发分支,然后将dev banch合并到test分支,这将触发自动化测试(容易部分),并且导致远程测试VM(托管在google云)拉取最新更改,从最新的docker文件重建映像(或从gitlab映像寄存器中拉取最新的映像)......然后使用最新的映像重新构建容器。

我在玩gitlab的runner,但我不理解它实际上是用来做什么的,尽管我查看了几乎所有的在线内容。 我只需在google云VM中安装它,然后当我从开发机器向gitlab推送时,存储库将' signal '运行程序(在VM上运行,执行一堆脚本(可能包括git pull最新更改?

因为我已经在本地将我的应用程序打包到一个容器中(并将映像推送到映像寄存器),所以我需要将docker作为运行程序在runner上使用吗?还是我可以只使用shell,然后在shell中运行命令?

我错过了什么?

简要总结:

问题:

  1. 运行程序实际上是什么, 它应该安装在哪里?
    它是否在意运行的目录?
    如果它不在意它运行的目录, 那么它在哪里执行它的脚本命令?在根目录吗?

  2. 如果我正在本地构建自己的映像并将其上传到gitlab的注册表中,

我是否需要将我的执行程序设置为docker?我不应该只将其设置为shell,然后拉取映像并构建它吗?(假设runner正在远程VM上运行)。

3个回答

27

实际上,runner是用来做什么的?

当您有一个项目以及一个.gitlab-ci.yml文件时,.gitlab-ci.yml定义了CI/CD流水线中的阶段以及每个阶段应执行的操作。这通常包括构建、测试和部署阶段。在每个阶段中,您可以定义多个作业。例如,在构建阶段中,您可能有3个作业,在debian、centos和windows上进行构建(在GitLab词汇表中为build:debianbuild:centosbuild:windows)。GitLab runner会克隆该项目,读取gitlab-ci.yaml文件,并执行指定的任务。因此,基本上GitLab runner是一个执行某些指定任务的Golang进程。

它应该安装在哪里?

您可以在您想要的环境中安装runner,这里列出了一些选项。https://docs.gitlab.com/runner/install/ 或者,您可以使用已经安装在GitLab基础架构上的共享runner。

它关心它运行的目录吗?

是的。由runner执行的每个任务都是相对于在https://gitlab.com/help/ci/variables/README中定义的CI_PROJECT_DIR。但您可以更改此行为。

它在哪里执行其脚本命令?在根目录吗?

我需要将执行器设置为docker吗?难道我不应该将其设置为shell,拉取镜像并构建它吗?

Runner可以有多个执行器,例如docker、shell、virtualbox等,但docker是最常见的一种。如果使用docker作为执行器,则可以从docker hub或您配置的注册表中拉取任何映像,并且您可以使用docker映像执行大量操作。在docker环境中,通常将其作为root用户运行。

点击此链接可前往GitLab Runner管理器的执行器文档,其中介绍了不同类型的执行器并提供了详细的配置指南。

3
我认为这里的主要问题是:当有人提交或合并提交到主分支时,Runner如何知道运行管道?GitLab是如何触发Runner的?还是Runner每小时调用API检查? - HCDINH
2
每次 push、merge 和 pull request 都会触发事件。Gitlab 监听它并启动 runner。几乎所有 CI/CD 工具都是这样做的,例如 Github Action、Jenkins 等等。 - sujeet

0

GitLab Runner是用于在多台机器上运行作业并将结果发送到GitLab的构建实例,可以放置在不同的用户、服务器和本地机器上。安装后,您可以将Runner注册为共享或特定。

共享Runner: 这些Runner对于具有相似要求的多个项目的作业非常有用。您可以使用单个或少量Runner来处理多个项目,这样易于维护和更新。

特定Runner: 这些Runner对于部署特定项目非常有用,如果作业对项目具有特定要求或特定需求。特定的Runner使用FIFO(先进先出)过程以先到先服务的方式组织数据。

受保护的Runner: 可以保护Runner以保存重要信息。


-4

查看GitLab访问日志,Runner不断轮询服务器


这完全没有回答问题。 - Dark Star1
这可能是对评论“GitLab如何触发Runner?或者Runner每小时调用API检查GitLab吗?”的回复。 - eMPee584

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接