GitLab Runner 应该在哪里实际运行?

Posted

技术标签:

【中文标题】GitLab Runner 应该在哪里实际运行?【英文标题】:Where should the GitLab Runner actually run? 【发布时间】:2019-06-22 10:03:50 【问题描述】:

我正在尝试使用 GitLab CI 设置持续集成/部署管道,但我很难理解(并且在文档中没有真正找到任何信息)关于 GitLab Runner 应该实际居住的位置。我应该在本地机器上运行一个吗?是否应该有一个只托管 Runner 的服务器?

据我了解,运行器的目的是执行由提交触发的作业。提交后,GitLab Runner 将尝试并执行 .gitlab-ci.yml 文件中定义的作业。

我知道这些工作可以做很多事情,但作为一个起点,我只想通过 SSH 连接到服务器并部署我的代码。

我的困惑来自于不了解 Runner 应该实际生活和跑步的推荐地点是什么?将它存储在我的本地机器上似乎可能存在问题,因为这将依赖于我的机器处于开启状态并且可用于部署工作。这是否意味着我们需要另一台服务器仅用于跑步者本身?

【问题讨论】:

没关系。您可以在任何地方运行它,无论是在本地、在云端还是在裸机上。 很公平。感谢您的回复。是否有任何您知道的最佳实践或推荐的执行方式记录在案?我想在本地托管它的想法对我来说似乎有问题。 【参考方案1】:

在哪里?好吧,只要你想。 Gitlab runner 以 pull 模式运行,即 runner 联系服务器的 web api 并检查作业,它还联系服务器上传所有日志。这意味着 gitlab runner 可以在 NAT 之后,也可以是非常动态的。

SSH 执行器通过 SSH 从运行器到目标的连接运行。这意味着带有 runner 的机器必须有到目标服务器的路由。

至于你应该在哪里运行跑步者?好吧,这取决于你。也许您需要偶尔在笔记本电脑上运行它以连接到本地虚拟机,也许您需要一台强大的云端机器,也许您想在地下室的旧服务器上运行一台便宜的机器。可能所有三个。

【讨论】:

感谢您的解释!这是我见过的最清晰的解释,它解释了 Runner 实际做了什么以及它是如何工作的。 是的,谢谢你说“拉模式”。 Gitlab 的文档并没有说清楚。我不知道我是否需要将我的 macbook 打开到网络才能工作。【参考方案2】:

正如文档所述,GitLab 运行器是隔离的(虚拟)机器,它们通过 GitLab CI 的协调器 API 获取工作。它们可以安装在每个发行版中。在配置从 admin/runners 页面获取运行器令牌之前。然后注册

sudo gitlab-runner register

您可以在您的 VPS 上的 docker 映像中使用 GitLab Runner,例如AWS。这是 runners-machine 的示例。驱动程序设置为 amazonec2,有多个选项,如 access-keyregionsec-group

  [runners.machine]
    IdleCount = 1
    IdleTime = 1800
    MaxBuilds = 10
    OffPeakPeriods = [
      "* * 0-9,18-23 * * mon-fri *",
      "* * * * * sat,sun *"
    ]
    OffPeakIdleCount = 0
    OffPeakIdleTime = 1200
    MachineDriver = "amazonec2"
    MachineName = "gitlab-docker-machine-%s"
    MachineOptions = [
      "amazonec2-access-key=XXXX",
      "amazonec2-secret-key=XXXX",
      "amazonec2-region=us-central-1",
      "amazonec2-vpc-id=vpc-xxxxx",
      "amazonec2-subnet-id=subnet-xxxxx",
      "amazonec2-zone=x",
      "amazonec2-use-private-address=true",
      "amazonec2-tags=runner-manager-name,gitlab-aws-autoscaler,gitlab,true,gitlab-runner-autoscale,true",
      "amazonec2-security-group=xxxxx",
      "amazonec2-instance-type=m4.2xlarge",
    ]

[runners.docker] 部分设置默认 Docker 镜像。

【讨论】:

感谢您的回复。那么runner本身就是一个虚拟机呢?这更有意义。而且我实际上已经在我的机器上设置了一个跑步者,它似乎可以工作,我更多的是询问关于跑步者本身应该托管在哪里等方面的最佳实践,因为这就是我发现的困惑

以上是关于GitLab Runner 应该在哪里实际运行?的主要内容,如果未能解决你的问题,请参考以下文章

gitlab-Runner配置参数详解

gitlab-runner运行一直卡住

什么是 gitlab runner

gitlab-runner的无权限问题

无需 Docker-in-Docker 的私有 Gitlab Runner 代码质量

使用多个 docker 守护进程运行 gitlab-runner