菜单

主机环境

相关源文件

宿主环境子系统提供了一个无需 Docker 的 GitHub Actions 工作流替代执行环境。该组件允许用户直接在其本地机器上运行 GitHub Actions,利用原生操作系统进行执行而不是容器。宿主环境实现了与 Docker 实现相同的 Container 接口,为运行器系统提供了统一的接口。

有关基于 Docker 的执行信息,请参阅Docker 集成

概述

宿主环境通过将容器操作映射到原生操作系统操作,提供了一种无容器运行 GitHub Actions 的方法。这对于 Docker 不可用、受限制或不受青睐的环境特别有用。

来源:pkg/container/host_environment.go28-36 pkg/container/container_types.go43-58

宿主环境结构

HostEnvironment 类型实现了 Container 接口,提供了基于宿主机的 Docker 容器环境替代方案。

来源:pkg/container/host_environment.go28-36 pkg/container/container_types.go43-58

关键字段

字段描述
路径宿主环境设置的基础路径
TmpDir用于工作流执行的临时目录路径
ToolCache用于缓存工作流执行期间安装的工具的目录
Workdir执行的工作目录
ActPathact 可执行文件的路径
CleanUp执行后清理资源的函数
StdOut标准输出写入器

来源:pkg/container/host_environment.go28-36

接口实现

HostEnvironment 实现了 Container 接口要求的所有方法,将容器操作映射到宿主操作系统操作

命令执行

exec 方法是在宿主系统上执行命令的核心函数

来源:pkg/container/host_environment.go285-372

文件操作

宿主环境实现了多种文件操作方法,将容器文件操作映射到宿主操作系统文件操作

方法描述
复制将文件复制到目标路径
CopyDir将目录复制到目标位置,并可选地进行 .gitignore 过滤
CopyTarStream将 tar 流解压到目标目录
GetContainerArchive从源路径创建 tar 归档文件

来源:pkg/container/host_environment.go50-169

平台检测

宿主环境检测平台(操作系统和架构),并将 Go 的平台标识符映射到 GitHub Actions 平台标识符

来源:pkg/container/host_environment.go424-456

跨平台支持

宿主环境包含针对不同操作系统的特定处理

功能描述
路径变量检测根据操作系统检测正确的 PATH 环境变量名称
路径拼接使用操作系统正确的路径分隔符拼接路径
区分大小写处理环境变量名称中的大小写敏感性差异
终端处理使用适当的特定操作系统实现设置伪终端 (PTY)

来源:pkg/container/host_environment.go404-469

Container 接口方法的实现

HostEnvironment 实现了 Container 接口的所有方法,并为宿主操作系统提供了适当的行为

空操作 (No-op)

某些容器操作在宿主环境中没有直接对应项,因此被实现为空操作

来源:pkg/container/host_environment.go38-181

清理操作

Remove 方法用于清理宿主环境

来源:pkg/container/host_environment.go378-385

与运行器系统集成

宿主环境通过 Container 接口与运行器系统集成,使得运行器能够以与 Docker 容器交互相同的方式与宿主环境交互

来源:pkg/container/host_environment.go357-385 pkg/container/container_types.go43-58

总结

宿主环境通过实现 Container 接口并将容器操作映射到宿主操作系统操作,为运行 GitHub Actions 工作流提供了无容器替代方案。这使得以下成为可能:

  1. 在未安装 Docker 的系统上运行工作流
  2. 直接在宿主操作系统上执行操作
  3. 利用原生操作系统的功能和性能

宿主环境通过通用的 Container 接口与 act 系统的其余部分保持兼容,从而无论底层执行环境如何,都能与运行器系统无缝集成。

来源:pkg/container/host_environment.go28-471 pkg/container/container_types.go43-58