← [ BACK_TO_NOTES ]

GitHub Actions 多服务 CI

Monorepo 多服务 CI 设计:并行 job、各服务独立 lint/build/test、并发取消、commitlint。

#howto #growing #ops #github-actions

[!info] related notes

GitHub Actions 多服务 CI

本文是 web / Go API / Python AI 服务的 CI 设计示例,不表示当前仓库存在这三个服务。目标是对每个服务得到独立的检查结果;需要先确认实际目录、依赖锁文件与工具链版本。

设计要点

三个服务并行

web job        → pnpm lint / typecheck / build / test
api job        → go vet / build / test
ai-service job → ruff check / pytest

这是职责草图,不是可执行 YAML。实际 job 还需 runs-on、checkout、工具链安装、依赖安装和 steps,并给命令设置正确的工作目录。

没有 needs 依赖的 job 可以并行调度,但受 runner 数量、账户并发限制和排队影响。仅在都能同时开始时,总执行时间才近似最慢 job 的耗时。

并发取消

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

同一 concurrency group 的新运行会替换待运行项;cancel-in-progress: true 还请求取消正在执行的旧运行。上述写法按 workflow 和 ref 分组,PR 的 ref 与分支 push 不同。适合可取消的 CI;部署或已产生外部副作用的步骤不能假定取消等于回滚。

各服务的工具链

服务包管理LintTest
webpnpmESLintVitest
apigo modgo vetgo test
ai-serviceuvruffpytest

Commitlint

可在 PR 时检查提交消息;若采用 squash-merge,还应校验最终 squash 消息的来源(常为 PR 标题)。仅检查分支内的每个 commit,并不保证合并后的消息符合 Conventional Commits。

缓存

各工具链的缓存:

  • pnpm: 可用 actions/setup-node 的 cache: pnpm 缓存包存储;需先准备可用 pnpm,并指定正确锁文件路径,不代表缓存 node_modules
  • Go: actions/setup-go 内置
  • uv: astral-sh/setup-uv 提供缓存支持,按使用版本核对启用方式

缓存用于加速,不能替代依赖安装,也不应影响检查结果。各服务应按锁文件和工具链版本设置缓存边界。

验证

  • 修改单个服务后,检查预期 job 被调度且工作目录正确。
  • 确认 lint、类型检查、构建、测试失败会让对应 job 失败,未通过时不能显示为成功。
  • 在测试分支连续提交,确认旧 CI 被取消、新提交得到完整结果。
  • 清空或未命中缓存时也能安装依赖并通过检查。

参考

创建于 2026/6/25 更新于 2026/10/6
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本