GitHub 操作自托管运行器如何工作?

Posted

技术标签:

【中文标题】GitHub 操作自托管运行器如何工作?【英文标题】:How does GitHub action self-hosted runner work? 【发布时间】:2021-02-04 00:43:22 【问题描述】:

我刚刚了解了 GitHub Actions,我认为它非常棒。

一开始让我印象深刻的一件事是,当我设置自托管运行器时,GitHub 要求我在我的本地机器上运行一堆命令,这显然是在私有网络中并且它没有暴露在互联网(入站 - 意味着 www 无法访问它)。

但是,在安装了 GitHub 要求我安装的内容之后,似乎一个 webhook 设置成功,并且每次推送/合并到我的主人(在 GitHub 操作文件中设置)时,我电脑上的工作人员都知道并开始拉取最新版本的 repo 并开始安装依赖项和其他 CI/CD 内容。

现在我很好奇的是,当我的虚拟机位于专用网络中时,GitHub 是如何与我的虚拟机对话的?

我从来都不是网络人,所以我不太确定为什么会这样。但它很迷人。

【问题讨论】:

【参考方案1】:

并不是 GitHub 连接到您的自托管运行器(入站),而是自托管运行器本身连接到 GitHub(出站)。这就是它起作用的原因。这是您的虚拟机(与专用网络中的运行器)与 GitHub 通信。 communication direction is reversed。在您的自托管运行器连接到 GitHub 后,双方都会保持连接打开。这允许所有事件通过 Github 存储库的连接推送到您的跑步者,如果发生某些事情(PR 已打开,提交已完成等......)。流道运行时,连接保持打开状态。当然,如果网络出现问题并且连接中断,通信将停止工作。修复 runner 定期向 GitHub 发送 ping 数据包以验证连接是否正常,如果不正常则尝试重新连接。

【讨论】:

您可以在the official documentation阅读更多有关通信工作流程的信息。

以上是关于GitHub 操作自托管运行器如何工作?的主要内容,如果未能解决你的问题,请参考以下文章

Docker 中的 Docker | Github 操作 - 自托管运行器

Github Action 是不是支持按需自托管运行器?

如何在 GitHub Actions 的自托管运行器上修复“GitHub.Services.OAuth.VssOAuthTokenRequestException”

GitHub 自托管运行器可以访问单独虚拟网络后面的 Azure 资源

自托管 GitHub Actions 运行器的 GitHub API 权限名称?

dockerized github 操作是不是支持 docker run 参数的网络选项