mcpField
G
github-actions

github-actions

github.com/oakoss云与 DevOps20140 次安装11 周前更新
代码仓库

关于 github-actions

面向编码 Agent 的 GitHub Actions 工作流指南,介绍 CI/CD 自动化配置及常见模式。内容涵盖触发器、作业、缓存、制品和安全设置,适用于构建、测试与发布流程。

主要功能

  1. 01配置事件触发器
  2. 02编排串行或并行作业
  3. 03使用矩阵构建
  4. 04缓存依赖并管理制品
  5. 05设置权限与密钥

适用场景

  1. 01自动运行代码测试
  2. 02部署应用或自动发布版本
  3. 03执行定时任务和依赖更新
  4. 04检查工作流权限与安全配置

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/oakoss/agent-skills --skill github-actions

安装后在 Claude Code 中输入/github-actions确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
caching-and-artifacts.md
matrix-and-reusable.md
security-and-secrets.md
workflow-syntax.md

详细介绍

GitHub Actions

概述

GitHub Actions 是一个 CI/CD 平台,可直接通过 GitHub 仓库自动执行构建、测试和部署流水线。工作流是 .github/workflows/ 中的 YAML 文件,可由推送、拉取请求、定时任务或手动触发等事件启动。每个工作流包含一个或多个作业,由 GitHub 托管或自托管的运行器执行。

适用场景: 自动化测试、持续部署、发布自动化、定时任务、多平台构建、依赖项更新、容器发布、代码质量检查、安全扫描。

不适用场景: 长时间运行的服务(使用合适的托管平台)、超出运行器限制的高强度计算任务(作业超时为 6 小时)、需要在多次运行之间保留状态的任务(使用外部存储)、实时事件处理(使用服务器配合 Webhook)。

快速参考

模式语法 / 操作要点
推送触发on: push: branches: [main]按分支、路径或标签筛选
PR 触发on: pull_request: types: [opened, synchronize]默认包括 opened、synchronize、reopened
定时触发on: schedule: - cron: '0 6 * * 1'仅限 UTC,最短间隔为 5 分钟
手动触发on: workflow_dispatch: inputs:为手动运行定义带类型的输入
作业依赖needs: [build, test]按顺序或并行运行作业
条件作业if: github.ref == 'refs/heads/main'基于表达式筛选作业 / 步骤
矩阵策略strategy: matrix: node: [18, 20, 22]为每种组合生成作业
依赖项缓存actions/cache@v5基于哈希的键,并以 restore-keys 作为回退方案
使用缓存进行设置actions/setup-node@v6 搭配 cache: 'pnpm'为包管理器内置缓存
上传制品actions/upload-artifact@v4在作业间共享数据或保留输出
下载制品actions/download-artifact@v4获取先前作业中的制品
可复用工作流uses: ./.github/workflows/reusable.yml通过 workflow_call 触发器调用
复合操作action.yml 中使用 using: composite将多个步骤打包为一个操作
并发concurrency: group: ${{ github.ref }}取消或排队处理重复运行
环境机密${{ secrets.API_KEY }}按仓库、组织或环境限定作用范围
OIDC 身份验证permissions: id-token: write为云服务提供商提供短期令牌
步骤输出echo "key=value" >> "$GITHUB_OUTPUT"在步骤和作业之间传递数据
服务容器services: postgres: image: postgres:16用于集成测试的辅助容器
超时timeout-minutes: 30挂起的作业或步骤快速失败
证明材料actions/attest-build-provenance@v3用于供应链的 SLSA 构建来源证明

表达式和上下文

上下文示例描述
githubgithub.ref_name, github.sha事件元数据、仓库信息、操作者
envenv.NODE_ENV当前作用域的环境变量
secretssecrets.API_KEY加密密钥(在日志中会被遮蔽)
inputsinputs.environment工作流分发或可重用输入
matrixmatrix.node当前矩阵组合的值
stepssteps.build.outputs.version之前步骤的输出
needsneeds.prepare.outputs.tag依赖作业的输出
runnerrunner.os, runner.archRunner 环境信息
varsvars.DEPLOY_URL仓库或组织配置变量

常见错误

错误正确做法
使用过时的 Action 主版本固定到当前主版本(@v6)或提交 SHA
缺少 persist-credentials: false使用自定义令牌或 OIDC 时,在 checkout 中设置
在工作流级别设置宽泛的 permissions在工作流级别设置 permissions: {},按作业授予权限
缓存键未包含依赖文件哈希在缓存键中包含 hashFiles('**/pnpm-lock.yaml')
在 if: 条件中使用密钥不能在 if: 表达式中直接使用密钥
不谨慎地使用 pull_request_target绝不要通过 pull_request_target 以写入权限运行 PR 代码
不取消过时的运行使用 concurrency 和 cancel-in-progress: true
将结构化数据存储为单个密钥为每个值单独创建密钥,以便正确地在日志中遮蔽
引用未通过 SHA 固定的 Action 标签将第三方 Action 固定到完整提交 SHA,确保供应链安全
在脚本中硬编码 Runner OS使用 runner.os 上下文以确保跨平台兼容性
使用 actions/cache 时未提供 restore-keys始终提供 restore-keys,以匹配部分缓存
在 run: 块中插入用户输入通过 env: 传递不可信值,以防止脚本注入
作业未设置 timeout-minutes设置明确的超时时间,以便卡住的进程能快速失败
未限定范围地使用 always()与状态检查结合使用:if: always() && steps.x.outcome == 'success'

委派

  • 工作流调试:使用 Explore Agent 检查工作流运行日志
  • 安全审计:使用 Task Agent 检查权限和密钥用法
  • 代码审查:将工作流 PR 审查委派给 code-reviewer Agent

参考资料

评论

支持 Markdown