宿主环境子系统提供了一个无需 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 | 执行的工作目录 |
ActPath | act 可执行文件的路径 |
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
HostEnvironment 实现了 Container 接口的所有方法,并为宿主操作系统提供了适当的行为
某些容器操作在宿主环境中没有直接对应项,因此被实现为空操作
来源: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 工作流提供了无容器替代方案。这使得以下成为可能:
宿主环境通过通用的 Container 接口与 act 系统的其余部分保持兼容,从而无论底层执行环境如何,都能与运行器系统无缝集成。
来源:pkg/container/host_environment.go28-471 pkg/container/container_types.go43-58