自托管的 GitHub Actions Runner 可以在托管 GitHub Runner 的同一台计算机上部署应用程序吗?

问题描述 投票:0回答:1

我目前正在尝试使用在 Ubuntu VM 上运行的自托管 GitHub Actions Runner 配置启用了 GitHub Actions 的 GitHub 存储库。

我想将我的应用程序部署到运行 GitHub Runner 的同一虚拟机。

这可能吗?这是可取的吗?

github github-actions github-actions-self-hosted-runners
1个回答
0
投票

这可能吗?

是的,这是可能的。

这样可取吗?

完全不建议。 GitHub 操作可能会在运行器上执行任意代码,这是潜在拉取请求的一部分。

在大多数情况下,运行者都配置有管理权限,以便能够安装工作流程可能需要的包。当然,这不是一个硬性要求。您可以让工作流程以没有

sudo
权限的普通用户身份运行,但这会限制其实用性。

您还可以在运行工作流之前需要批准,但是一旦您运行它,它仍然会在您运行应用程序的同一台计算机上执行该 PR 中的代码。

如果目标是使用 github 操作在服务器上部署您的应用程序,您可能需要查看 github 部署

话虽如此,您可以使用以下选项:

  • 使用同一台机器以安全(呃)的方式运行操作
  • 限制长时间运行、CPU/内存/IO 密集型工作流程运行造成的潜在资源耗尽
  • 每次都在干净的环境中进行可重复的运行

使用短暂的跑步者

上述所有问题都可以通过在容器或虚拟机内使用临时运行器来解决。这样做会在安全和资源边界方面给您带来一些隔离。

大多数情况下应该使用临时运行器。这些运行器仅运行一项作业,之后它们将从 GitHub 中删除,并且必须添加新的运行器。

这可确保您每次都获得一个干净的工作流程环境,并且它们与任何其他系统隔离,从而限制运行任意代码的潜在安全影响。

然而,短暂的跑步者可能很难管理。它们需要使用某种自动缩放器来侦听来自 GitHub 的工作流事件,并通过启动临时运行器来做出反应,并在工作完成时降低其皮重。

幸运的是,这方面有几种选择:

  • ARC - 动作运行控制器。这是一个 Kubernetes 控制器,它在 k8s 集群中启动运行器,并使这些运行器可供您的存储库/组织/企业使用。现在,这是一个官方 GitHub 项目,由 GitHub 和社区维护,也是 GitHub 针对大多数用例推荐的项目。通过一些配置,如果容器运行时不适合您的用例,我怀疑您也可以通过Kubevirt轻松运行虚拟机。
  • terraform-aws-github-runner - 有多个 terraform 提供程序可以充当各种基础设施上的自动调用程序。 AWS就是这样一个例子。
  • lxdrunner - LXDRunner 是一个自动调用器,可以在 LXD 上旋转运行器,但它似乎有一段时间没有更新了。
  • GARM - GitHub Actions Runner Manager。完全公开,我是这个自动缩放器的作者之一。 GARM 的创建是为了允许用户使用您可以为其编写提供程序的任何系统,作为临时运行者的目的地。它目前支持一系列云提供商(AWS、Azure、OpenStack、Equinix、k8s、lxd、incus)。 LXDIncus 可能很容易满足您的需求,因为它们可以轻松地在物理或虚拟机上启动容器,以运行临时运行程序,而不需要您设置 k8s 集群。

无论您最终使用哪种选项,它都应该比运行持久运行器安全得多,尤其是在您托管应用程序的同一系统上。

© www.soinside.com 2019 - 2024. All rights reserved.