CI/CD Operations
这是一份关于持续集成、持续交付与持续部署的模式参考,围绕 GitHub Actions、发布自动化工具与测试流水线展开。内容以速查表、代码片段、表格与决策树为主,供配置和排查 CI/CD 时参考。
GitHub Actions 速查
工作流文件结构
文档给出了完整的工作流文件骨架,包含 name(Actions 标签页显示名)、on(触发事件,如 push/pull_request)、permissions(GITHUB_TOKEN 权限范围,遵循最小权限)、concurrency(防止重复运行)、env(工作流级环境变量)、jobs 以及 steps 等部分,并以 Node 项目为例展示 checkout、setup-node、npm ci、npm test 的典型步骤。
核心语法元素
以表格列出常用元素及用途与示例,包括:on(事件触发)、runs-on(运行器选择)、needs(作业依赖)、if(条件执行)、strategy.matrix(并行变体)、environment(部署目标)、permissions(令牌作用域)、uses(使用动作)、run(运行命令)、env(步骤环境变量)。
触发决策树
以表格形式给出场景与触发方式及配置的对应关系,如:每个 PR 运行测试用 pull_request;合并到主分支部署用 push;版本标签发布用 push tags: ['v*'];夜间构建用 schedule cron;手动部署用 workflow_dispatch;被其它工作流调用用 workflow_call;PR 标签变化用 pull_request types: [labeled];议题评论用 issue_comment;发布已发布用 release;包推送用 registry_package。
触发过滤模式
展示 push 下的 branches、paths(可用 ! 排除)、tags 过滤,以及 pull_request 下的 types、paths-ignore 等配置写法。
缓存策略
以表格列出不同生态系统的缓存动作/键、路径与恢复键:Node(npm)、Node(pnpm)、Go modules、Cargo、pip/uv、Docker 层、Gradle、Composer。并给出使用 actions/cache@v4 手动缓存 Cargo 目录的示例,键中包含操作系统与锁定文件哈希。
矩阵策略
展示 strategy 下的 fail-fast、max-parallel、matrix 组合,以及 include 追加特定组合、exclude 排除特定组合的写法;另给出动态矩阵示例:由 prepare 作业输出 JSON 矩阵,后续作业通过 fromJson 使用。
密钥管理
列出密钥作用域与访问范围及用例:仓库密钥、环境密钥、组织密钥、OIDC 令牌(联邦身份,云部署无需存储密钥)。并给出最佳实践:绝不回显或记录密钥、用 ::add-mask:: 遮蔽自定义值、部署密钥放在 environment 中。给出使用 OIDC 配置 AWS 凭据的示例(id-token: write)。
常见工作流模式
给出了三类完整示例:在 PR 上测试(含 concurrency 取消进行中运行、lint、带覆盖率的测试)、合并到主分支部署(含 environment: production、构建后用 wrangler 部署)、标签发布(fetch-depth: 0、用 gh release create 生成发布说明)。
避坑表
以表格列出常见问题与修复方式,包括:浅克隆导致 git describe 失败(用 fetch-depth: 0)、默认权限只读(显式设置 permissions)、动作固定(@main 可能无预警破坏,应固定到 SHA 或 @v4)、fork PR 无密钥、并发部署竞态(用 concurrency)、缓存无限增长(键中加锁文件哈希)、Node 版本需显式指定、Docker 层缓存、矩阵与环境审批、路径过滤与必需检查、GITHUB_TOKEN 无法触发其它工作流、Windows 换行符问题。
表达式速查
以表格列出常用表达式及其结果,如 github.event_name、github.ref_name、github.sha、github.actor、runner.os、contains 检查提交信息、needs 输出、fromJson 解析 JSON、hashFiles 生成缓存键、format 字符串格式化、toJson 调试矩阵配置。
步骤输出与作业输出
给出通过 $GITHUB_OUTPUT 写入步骤输出并在后续步骤引用的示例,以及作业级 outputs 配合 needs 实现跨作业通信的示例。
参考文件
列出三份参考文件及其内容:references/github-actions.md 覆盖完整工作流语法、可复用工作流、复合动作、OIDC、运行器与调试;references/release-automation.md 覆盖语义化版本、semantic-release、changesets、goreleaser、变更日志与发布;references/testing-pipelines.md 覆盖测试阶段、并行、覆盖率、服务容器、CI 中的端到端测试与部署流水线。