无需登录 数据私有 本地保存

CI/CD 流水线配置验证器 - 检查 GitHub Actions 语法

44
0
0
0

GitHub Actions 核心概念

Workflow(工作流)

Workflow 是 GitHub Actions 的核心概念,它是一个自动化流程的完整定义,存储在仓库的 .github/workflows/ 目录下,采用 YAML 格式编写。一个 Workflow 由一个或多个 Job 组成,每个 Job 又包含多个 Step。Workflow 通过事件触发器(如 push、pull_request)启动执行。一个仓库可以包含多个 Workflow,每个 Workflow 可以针对不同的事件和条件运行。Workflow 文件的命名必须以 .yml 或 .yaml 结尾。

Job(作业)

Job 是 Workflow 中的一个独立执行单元。一个 Workflow 可以包含多个 Job,默认情况下多个 Job 会并行执行。如果需要 Job 按顺序执行,可以通过 needs 字段定义依赖关系。每个 Job 运行在独立的运行器(Runner)实例上,拥有独立的工作空间。Job 的输出可以传递给后续依赖的 Job。Job 的命名必须是唯一的,且应使用小写字母、数字和连字符。

Step(步骤)

Step 是 Job 中的一个独立操作单元。每个 Step 要么执行一个预定义的 Action,要么运行一条 Shell 命令。一个 Job 中的多个 Step 按顺序执行,前一个 Step 完成后才开始下一个。Step 共享同一 Job 的工作空间和环境变量。每个 Step 都可以设置条件(if)、超时时间和输出参数。合理组织 Step 的顺序对于确保工作流的正确执行至关重要。

Action(动作)

Action 是 GitHub Actions 中可复用的操作单元,可以从 GitHub Marketplace 或公共仓库中获取。使用 Action 可以避免重复编写常见的操作逻辑,如代码检出、依赖安装、缓存管理等。Action 通过 uses 关键字引用,格式为 owner/repo@ref。例如,actions/checkout@v4 用于检出代码,actions/setup-node@v4 用于安装 Node.js 环境。自定义 Action 可以发布到 GitHub Marketplace 供社区使用。

Trigger(触发器)

Trigger 是启动 Workflow 执行的事件。GitHub Actions 支持多种触发事件:push推送到指定分支时触发;pull_request创建或更新 Pull Request 时触发;schedule使用 cron 语法定时触发;workflow_dispatch手动触发;release发布新版本时触发;issuesIssue 相关操作时触发。触发器通过 on 字段定义,支持分支过滤和路径过滤等条件。正确配置触发器是确保 Workflow 在正确时机执行的关键。

Runner(运行器)

Runner 是执行 GitHub Actions Workflow 的服务器实例。GitHub 提供免费的托管运行器(Ubuntu、Windows、macOS),也可以使用自托管运行器(Self-hosted Runner)。托管运行器在每次执行后会重置状态,确保环境的一致性。自托管运行器适用于需要特殊硬件或软件环境的场景。运行器的选择通过 runs-on 字段指定,如 runs-on: ubuntu-latest。

YAML Syntax(YAML 语法)

YAML 是 GitHub Actions 配置文件的标准格式。YAML 使用缩进表示层级关系,通常使用 2 个空格作为缩进单位。常见的 YAML 语法要素包括:键值对(key: value);列表(使用 - 前缀);嵌套(通过缩进表示层级);多行字符串(使用 | 或 > 符号);注释(以 # 开头)。YAML 对缩进极其敏感,混用空格和制表符或缩进数量不一致都会导致语法错误。在 GitHub Actions 中,正确理解 YAML 语法是编写可靠配置的基础。

Environment Variables(环境变量)

环境变量是 Workflow 执行过程中使用的动态值。GitHub Actions 支持在多个级别设置环境变量:工作流级别(env 字段)、作业级别、步骤级别以及通过 env 属性直接设置。内置环境变量如 GITHUB_SHA(提交哈希)、GITHUB_REF(分支引用)、GITHUB_WORKSPACE(工作空间路径)等由系统自动提供。自定义环境变量可以在 Workflow 中定义,也可以在仓库设置中配置(包括 Secret 变量)。环境变量通过 ${{ env.VARIABLE_NAME }} 语法在配置中引用。

Secrets(密钥)

Secrets 是 GitHub Actions 中用于存储敏感信息的加密变量。Secrets 在 Workflow 日志中会被自动遮蔽,防止敏感信息泄露。Secrets 在仓库设置中配置,只能在 Workflow 中通过 secrets 上下文访问。常见的 Secrets 用途包括:Docker Hub 密码、AWS 访问密钥、部署令牌等。Secrets 不会传递给从 fork 仓库触发的工作流,这是出于安全考虑的默认行为。对于需要跨仓库共享的 Secrets,可以使用 Environment Secrets 或 Organization Secrets。

permissions(权限)

permissions 字段用于配置 Workflow 或 Job 的 GITHUB_TOKEN 权限。通过最小权限原则,可以限制 GITHUB_TOKEN 的访问范围,提高安全性。permissions 可以在工作流级别和作业级别设置。常见的权限包括:contents(仓库内容读写)、issues(Issue 操作)、pull-requests(PR 操作)、packages(包管理)、deployments(部署)等。设置 permissions: {} 可以完全禁用 GITHUB_TOKEN 权限,适用于不需要任何 GitHub API 访问的 Workflow。