- Gerd Zellweger's观点:在其博客中指出 GitHub Actions 从基本需求开始,达到可工作的 CI 解决方案相对复杂且维护困难,存在如必需检查的烦扰(尤其与自动修复和合并队列交互时)、未固定操作的默认安全问题及晦涩的令牌系统、本地和隔离步骤测试的困难以及速度问题等。
- mikepurvis 的观点:强隔离系统如 Nix 和 Bazel 能提供无烦恼的本地可重复性;CI 平台应让底层构建工具管理和排序构建,而非 GUI;希望下一代 CI 系统能深入接入本地工具,展示构建工具的操作顺序和日志等。
- 创新方向:寻求一种独立工具,可在本地机器、GitHub Actions 或自有 CI 服务上运行,切换方便,能将运行分解为适当组件,CI 服务只需良好展示,并行和排序由该工具控制。
Nix 的优势:
- 无供应商锁定,基于开源项目,如使用 garnix 设置更快、缓存基础设施更好、日志更优、运行更快。
- 本地可轻松重现运行,只是一个 nix 构建,无需手动安装依赖或担心本地与 CI 构建差异。
- CI 不仅是 CI,类似自有构建农场,本地和 CI 构建相似,可相互替代,nix 自动检查和缓存。
- 速度快,从开始就提供缓存,很多部分可跳过。
- 运行部分 CI 管道容易,管道可分离为包,可单独构建。
- 安全更好,一切都被固定,沙箱构建,减少网络访问,依赖网络访问需明确且不影响代码。
- 令牌安全更好,nix 构建步骤与其他部分有精心设计的接口。
- Nix 的不足及解决方案:使用 Nix 的主要缺点是需学习 Nix,近期发布 garnix 模块可帮助解决,若栈已被支持,可生成 Nix 代码,可与 garnix 一起使用。
总结:Nix 是做 CI 的正确方式,虽有学习难度但解决方案也在出现,相比 GitHub Actions 更快速、可靠、可调试和安全,可考虑尝试。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。