菜单

步骤执行

相关源文件

目的与范围

本文详细介绍了 act 框架中的步骤执行子系统,重点关注单个工作流步骤如何被处理、评估和执行。它涵盖了步骤生命周期、执行流程、条件评估以及与 GitHub 上下文的集成。

有关操作如何在步骤中执行的信息,请参阅操作执行。有关整个作业执行过程的详细信息,请参阅作业执行

步骤执行模型

act 中的步骤执行系统遵循 GitHub Actions 步骤模型,包含三个不同的阶段,确保每个工作流步骤的正确设置、执行和清理。

来源:pkg/runner/step.go18-28 pkg/runner/step.go30-36

步骤接口

步骤执行系统的核心是 step 接口,它定义了每个执行阶段和上下文访问所需的方法。

接口方法具有以下用途:

  • 阶段方法premainpost):返回每个阶段的执行器。
  • 上下文方法:访问运行上下文、GitHub 上下文和步骤环境。
  • 模型方法:从工作流定义中访问步骤模型。
  • 条件方法:获取决定步骤是否应该执行的表达式。

来源:pkg/runner/step.go18-28

步骤执行流程

步骤执行过程遵循特定的流程,处理条件、环境设置、执行和结果处理。

来源:pkg/runner/step.go65-200

步骤执行中的关键组件

  1. 步骤结果追踪:每个步骤都会生成一个包含结果和结论状态的结果。

    字段描述
    结果(Outcome)步骤执行的直接结果(成功/失败/跳过)
    结论应用持续规则后的最终结论(成功/失败/跳过)
    输出步骤产生的输出变量映射
  2. Runner 命令文件:步骤执行准备特殊文件,步骤可以使用这些文件来:

    • 设置输出(GITHUB_OUTPUT
    • 设置环境变量(GITHUB_ENV
    • 修改路径(GITHUB_PATH
    • 设置步骤状态(GITHUB_STATE
    • 创建步骤摘要(GITHUB_STEP_SUMMARY
  3. 超时处理:步骤可以指定超时时间,在此时间后执行将被取消。

来源:pkg/runner/step.go114-144 pkg/runner/step.go220-228

条件评估

步骤执行由决定步骤是否运行的条件控制。

if 条件

在执行步骤之前评估 if 条件。

来源:pkg/runner/step.go282-297

错误时继续(Continue-on-Error)评估

当步骤失败时,continue-on-error 属性决定工作流是否应该继续。

来源:pkg/runner/step.go299-314 pkg/runner/step.go157-176

环境管理

步骤执行涉及对环境变量的细致管理。

环境变量层级(从低到高优先级):

  1. Runner 上下文环境
  2. 作业容器环境
  3. GitHub 上下文环境
  4. 步骤特定环境
  5. 步骤输入参数(作为 INPUT_* 变量)

来源:pkg/runner/step.go230-255 pkg/runner/step.go257-280

GitHub 上下文集成

步骤可以访问 GitHub 上下文,该上下文提供了有关工作流、事件、存储库和当前执行状态的信息。

GitHub 上下文根据以下内容填充:

  1. 事件负载(来自 event.json)
  2. Git 仓库信息(ref, sha 等)
  3. 工作流和作业配置
  4. 环境变量

来源:pkg/model/github_context.go12-43 pkg/runner/step.go269

作业取消处理

步骤执行包括处理作业取消的机制。

这允许步骤根据其 if 条件在作业取消时做出不同的响应。

来源:pkg/runner/step.go202-218

命令文件处理

步骤执行后,会处理多个命令文件以更新执行环境。

这些文件允许步骤与工作流 runner 进行通信并影响执行环境。

来源:pkg/runner/step.go177-194