菜单

核心组件

相关源文件

介绍

本页概述了构成 act 系统架构的主要构建块。Act 通过一套相互关联的组件模拟 GitHub Actions 环境,使开发人员能够在本地运行 GitHub Actions 工作流。

有关如何使用 act 的信息,请参阅概述。有关工作流执行方式的深入探讨,请参阅执行引擎

核心组件架构

下图展示了系统的主要组件及其关系

来源:README.md cmd/root.go pkg/runner/run_context.go pkg/runner/runner.go

执行流程

此图说明了组件在工作流执行期间如何交互

来源:pkg/runner/runner.go107-207 pkg/runner/run_context.go654-683

运行器系统

运行器系统是工作流执行的主要协调器,负责协调执行计划和管理作业执行。

主要职责

  • 处理事件触发器和工作流文件
  • 从工作流计划创建计划执行器
  • 根据矩阵策略管理作业的并行执行
  • 协调跨多个阶段的作业执行
  • 处理工作流级配置

Config 结构体包含工作目录、事件名称、秘密、环境变量、平台和容器设置等配置选项。

来源:pkg/runner/runner.go16-255

运行上下文

运行上下文保存作业执行所需的所有状态和配置,作为运行器与执行环境之间的桥梁。

RunContext 结构体(定义于pkg/runner/run_context.go31-56)维护重要的作业特定信息

  • 环境变量和秘密
  • GitHub 上下文信息
  • 容器配置和引用
  • 步骤执行结果
  • 表达式评估能力
  • 服务容器管理

它负责启动和停止容器、执行命令,并为步骤提供适当的执行环境。

来源:pkg/runner/run_context.go31-973

工作流规划器

工作流规划器分析 GitHub Actions 工作流文件,并根据事件触发器和作业依赖关系创建执行计划。

主要职责

  • 解析和验证工作流 YAML 文件
  • 确定给定事件应运行哪些作业
  • 创建包含作业依赖关系的执行计划
  • 处理矩阵策略扩展
  • 根据需求依赖关系将作业分类到不同阶段

生成的 Plan 包含 Stages,后者根据作业的依赖关系将作业分组,以便并行或按顺序执行。

来源:cmd/root.go447-455 pkg/runner/runner.go108-206

作业执行器

作业执行器管理作业的执行,协调步骤并管理作业容器环境。

主要职责

  • 设置作业容器和环境
  • 管理服务容器
  • 按顺序执行步骤
  • 处理作业输出
  • 处理作业级错误
  • 作业完成后清理容器和资源

作业执行器创建并执行步骤流水线,处理作业前设置、主作业执行和作业后清理。

来源:pkg/runner/run_context.go697-723

步骤执行器

步骤执行器在作业中运行单个步骤,处理不同类型的步骤(运行命令或动作)及其执行生命周期。

主要职责

  • 在作业容器中执行运行命令
  • 设置和执行 GitHub Actions
  • 管理步骤的前期、主要和后期阶段
  • 处理步骤输出和错误
  • 评估步骤条件(if 表达式)

步骤可以是运行命令(在容器中执行的 shell 命令)或动作(从本地或远程源执行的 GitHub Actions)。

来源:pkg/runner/run_context.go697-723

容器系统

容器系统为作业和步骤提供执行环境,管理 Docker 容器或主机环境。

容器系统支持两种主要的执行环境

  1. 用于隔离执行的 Docker 容器(由 Container 实现管理)
  2. 用于在本地系统直接执行的主机环境(由 HostEnvironment 实现管理)

主要职责

  • 创建和管理 Docker 容器
  • 为本地执行提供主机环境替代方案
  • 设置卷挂载和网络
  • 在容器中执行命令
  • 在主机和容器之间复制文件
  • 清理容器和资源

RunContext 通过 JobContainer 字段使用这些容器系统,为步骤提供执行环境。

来源:pkg/runner/run_context.go178-245 pkg/runner/run_context.go654-683

模型层级结构

下图展示了核心组件使用的模型对象的层级结构

此模型层级结构反映了 GitHub Actions 的工作流结构,使 Act 能够以与 GitHub 实现一致的方式解析和执行工作流。

来源:pkg/runner/run_context.go31-56 pkg/runner/runner.go23-64

组件配置

Config 结构体(位于pkg/runner/runner.go22-64)为核心组件提供配置选项

配置选项描述
执行者触发事件的用户
工作目录工作目录路径
事件名称要运行的事件名称
事件路径事件 JSON 文件路径
秘密可供动作使用的秘密映射
环境变量环境变量映射
平台平台名称到 Docker 镜像的映射
绑定工作目录是否将工作目录绑定到容器
容器架构运行容器的架构
动作缓存目录缓存动作内容的路径
GitHub 实例要使用的 GitHub 实例(支持 GitHub Enterprise)

有关特定组件的更多详细信息,请参阅本 Wiki 中的相应页面:工作流模型作业和矩阵步骤系统动作表达式语法