GitHub Actions 成本在泄漏,且大多数团队直到为时已晚才注意到
Source: Dev.to
它的功能
CICosts 以 GitHub App 的形式安装,每当工作流运行完成时会收到 webhook 事件。它将运行器分钟数乘以 GitHub 对该运行器类型(Linux、Windows、macOS、自托管)的公开定价,并存储结果。
随后你可以在仪表盘中查看费用:
- 按工作流
- 按仓库
- 按分支
- 随时间变化
你可以在工作流超过阈值时设置警报,查看趋势,发现 PR 合并后的回退,并比较不同环境的费用。
定价计算(撰写时)
- Linux 运行器:$0.008/分钟
- Windows 运行器:$0.016/分钟
- macOS 运行器:$0.08/分钟
示例:一个 12 分钟的 Linux 工作流费用为 $0.096。如果在 30 个仓库中每天运行 500 次,费用会迅速累积。
常见的浪费模式
矩阵爆炸
一个在 3 个操作系统版本和 4 个运行时版本上进行测试的工作流,每次推送会运行 12 次。如果矩阵是逐步添加的,累计费用会让人吃惊。
用 macOS 运行器做非 macOS 工作
macOS 运行器的费用大约是 Linux 的 10 倍。它们在 iOS 构建时是必需的,但有时会因为复制了工作流模板而在后端流水线中出现,未进行相应调整。
并行测试却未使用缓存
并行运行测试固然好,但如果每个并行作业因为缓存键错误而重新下载大体积依赖(例如 200 MB),费用会激增。
不必要的夜间构建
原本为捕获已修复的 bug 而创建的定时夜间工作流,如果不清理,可能会无限期地继续运行。
只要有了可视化,这些模式都很容易修复。
为什么现在开源且免费
我最初把 CICosts 做成付费 SaaS,但对一个没有建立起声誉的产品来说,定价过于限制。让工程师为 $29/月 添加一个 GitHub App 并信任它处理 CI 数据是很难的销售。
诚实的说:产品本身不错,只是没人知道——这是分发问题,而不是产品问题。
现在的模式很简单:
- MIT 许可证 的源代码托管在 GitHub 上。
- 在 app.cicosts.dev 提供的托管版本免费且无限制。
- 为需要 SLA 或私有部署的组织提供企业版。
入门指南
从 GitHub 安装应用:
https://github.com/phonotechnologies/cicosts-app
https://github.com/phonotechnologies/cicosts-api或者直接使用托管版本 app.cicosts.dev。将 GitHub App 添加到你的组织,费用数据将在下次工作流运行后的几分钟内开始流入。
整个设置大约需要五分钟,且不需要对仓库中的代码进行任何更改。GitHub App 安装后会自动接收 webhook 事件。
如果重新来过,我会怎么做
如果从零开始,我会从第一天就把它开源,并全力完善 GitHub App 的安装体验。此类工具最难的部分不是费用计算,而是让人足够信任并安装它。
开源可以让这件事更容易:任何人都可以阅读代码,准确看到存储了哪些数据,并确认没有隐藏的东西。代码位于 GitHub 上的 phonotechnologies 组织下。欢迎提交 PR,尤其是用于更新运行器定价和新增警报类型的。如果遇到问题,请提交 issue。