菜单

运行器系统

相关源文件

Runner System 是 Act 的核心编排引擎,用于在本地执行 GitHub Actions 工作流。它将工作流定义转换为可执行计划,并管理作业和步骤的实际执行。本文档重点介绍 Runner 的架构、执行流程和容器管理。有关工作流模型本身的信息,请参阅 工作流模型,有关步骤执行的信息,请参阅 步骤执行

Runner 架构

Runner 接口是 Runner System 的核心,它提供了执行工作流计划的主要抽象。

主要的实现 runnerImpl,负责创建可以运行工作流计划的执行器。

Runner System 组件

来源: pkg/runner/runner.go1-256 cmd/root.go663-702

运行器配置

Runner 在初始化时会传入一个包含所有必要配置选项的 Config 结构体。

来源: pkg/runner/runner.go22-64 cmd/root.go597-637

执行流程

Runner System 遵循分层执行模型。

来源: pkg/runner/runner.go107-208 cmd/root.go697-702

计划执行

Plan Executor 按顺序处理每个阶段。在每个阶段中,作业会并行执行,最多可达 CPU 核心数量的限制。

来源: pkg/runner/runner.go107-208 cmd/root.go697-702

运行上下文

RunContext 是作业运行的中心执行上下文。它包含运行作业所需的所有信息和功能。

来源: pkg/runner/run_context.go31-56 pkg/runner/run_context.go698-723

容器管理

Runner System 支持两种执行环境:

  1. Docker 容器 (默认): 适用于典型的 CI/CD 工作流。
  2. 宿主机环境: 适用于自托管的 Runner 或在没有容器的情况下进行本地执行。

容器环境选择

容器环境根据作业的 runs-on 平台配置来确定。

来源: pkg/runner/run_context.go655-664 pkg/runner/run_context.go666-670

作业容器设置

对于在 Docker 容器中运行的作业,设置过程包括:

来源: pkg/runner/run_context.go247-429

服务容器管理

Runner System 支持 GitHub Actions 工作流中定义的服务容器。

来源: pkg/runner/run_context.go553-618 pkg/runner/run_context.go283-343 pkg/runner/run_context.go353-371

矩阵作业处理

Runner System 支持 GitHub Actions 工作流中定义的矩阵策略。

来源: pkg/runner/runner.go158-163 pkg/runner/runner.go176-196 pkg/runner/runner.go223-240

与 Act CLI 的集成

Runner System 由 Act CLI 命令初始化和调用。流程如下:

来源: cmd/root.go387-703

环境变量和上下文

Runner System 在多个级别管理环境变量。

来源: pkg/runner/run_context.go78-90 pkg/runner/run_context.go872-973 pkg/runner/run_context.go1018-1066

错误处理和清理

Runner System 实现了适当的清理和错误处理。

来源: pkg/runner/run_context.go346-376 pkg/runner/run_context.go611-618 pkg/runner/run_context.go543-551

关键实现细节

Runner System 有几个关键的实现细节需要了解:

  1. 容器命名: 使用作业名称、工作流和哈希值的组合来创建唯一的容器名称。
  2. 网络设置: 为带有服务容器的作业创建专用网络。
  3. 卷管理: 管理作业容器和服务容器的卷。
  4. 令牌处理: 安全地处理 GitHub 令牌和其他秘密。
  5. 矩阵过滤: 对矩阵组合应用用户定义的过滤器。

来源: pkg/runner/run_context.go827-849 pkg/runner/run_context.go97-106 pkg/runner/run_context.go127-175 pkg/runner/run_context.go1087-1117 pkg/runner/runner.go223-240

与其他系统集成

Runner系统集成了Act的多个其他组件

  1. 表达式评估器:用于评估GitHub Actions表达式
  2. 命令处理器:用于处理工作流命令
  3. Action缓存:用于缓存Action内容
  4. 产物服务器:用于处理工作流产物
  5. 容器系统:用于管理容器和卷

这些集成确保Runner系统能够本地执行GitHub Actions工作流,使其在很大程度上模拟GitHub Actions的执行环境。

来源: pkg/runner/run_context.go44 pkg/runner/run_context.go179-182 pkg/runner/run_context.go624-639 cmd/root.go669-696