尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

为什么你的Nix构建不可复现?install-nix-action固定nixpkgs版本与install_url指南

为什么你的Nix构建不可复现?install-nix-action固定nixpkgs版本与install_url指南 为什么你的Nix构建不可复现install-nix-action固定nixpkgs版本与install_url指南【免费下载链接】install-nix-actionInstalls Nix on GitHub Actions for the supported platforms: Linux and macOS.项目地址: https://gitcode.com/gh_mirrors/in/install-nix-actioninstall-nix-action 是一个在持续集成CI环境中一键安装 Nix 的 GitHub Action支持 Linux 和 macOS 平台。它通过install_url与nix_path两个输入帮助你把 Nix 版本和 nixpkgs 渠道彻底钉死从而解决 Nix 构建不可复现的常见痛点——同一份代码今天能构建通过明天却莫名其妙地失败。 Nix 构建为什么会今天能跑、明天就挂Nix 本身就是为可复现构建而生的但在 CI 场景下不可复现通常来自三个漂移来源漂移来源表现解决思路nixpkgs 渠道漂移用了nixos-unstable等滚动渠道上游一改构建结果就变用nix_path固定渠道或提交哈希Nix 版本漂移安装脚本不指定版本时装到的 Nix 版本会随时间变化用install_url固定 Nix 版本环境配置差异不同 Runner 上的 nix.conf 配置不一致用extra_nix_config统一配置一句话总结不可复现的根源几乎都是没有锁版本。install-nix-action 的价值就在于把这两个锁都交到你手里。 用 install_url 输入固定 Nix 版本项目定义的所有输入都在 action.yml 中声明其中install_url的含义是指定一个包含 Nix 安装脚本的 URL。默认情况下install-nix.sh 会从 Nix 官方发布服务器拉取当前锁定版本nix-2.25.2的安装脚本并内置了 5 次 curl 重试逻辑保证安装过程稳定。而当你显式传入install_url时可以固定 Nix 到某个特定版本例如指向官方发布服务器上nix-2.3.7对应的 install 脚本可以测试非稳定版本unstable releases官方说明中最小支持的 Nix 版本为2.3.5更低版本不建议使用配置方式非常直接在 workflow 的with块中指定即可示意- uses: cachix/install-nix-actionv27 with: install_url: 指向某个 Nix 固定版本的安装脚本 URL install_options: --no-daemoninstall_options可以传递额外的安装器参数方便你做单机模式、无守护进程等定制安装。 固定 nixpkgs 版本用 nix_path 锁定渠道装好 Nix 只是第一步。项目默认不配置任何 nixpkgs你需要通过nix_path输入来设置NIX_PATH环境变量。常见做法有两类方式一指定渠道适合日常开发- uses: cachix/install-nix-actionv27 with: nix_path: nixpkgschannel:nixos-unstable渠道适合快速迭代但注意它本质上仍是滚动的严格复现场景请见方式二。方式二固定 nixpkgs 提交哈希适合严格复现把nix_path指向 nixpkgs 仓库的某个具体 commit 路径本地路径或 tarball URL 均可这样无论上游怎么变你的构建永远基于同一份包定义。这是官方推荐的pin nixpkgs做法也是实现可复现构建最关键的一步。验证你当前配置生效的版本只需一条命令来自项目 README.md 的 FAQnix-instantiate --eval -E (import nixpkgs {}).lib.version⚙️ 其他关键输入让 CI 环境更稳定除了两个锁install-nix-action 还针对 CI 做了多项默认优化详见 install-nix.sh你可以通过以下输入按需覆盖输入作用典型用途extra_nix_config追加内容到/etc/nix/nix.conf添加二进制缓存、trusted-public-keysgithub_access_token让 Nix 用 Token 从 GitHub 拉取规避限流Flakes 场景强烈建议配置nix_path设置NIX_PATH固定 nixpkgs上文的核心用法enable_kvmLinux 上启用 KVM 硬件加速虚拟化跑 NixOS 测试时设为trueinstall_options附加安装器参数自定义安装行为这些默认优化包括自动开启flakes与nix-command实验特性、max-jobs auto、show-trace true报错时显示完整追踪、自动配置GITHUB_TOKEN作为 GitHub 访问令牌以及always-allow-substitutes trueCI 优化避免重复构建已有缓存的派生。 完整的最小配置示例jobs: tests: runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 - uses: cachix/install-nix-actionv27 with: install_url: Nix 固定版本安装脚本 URL nix_path: nixpkgschannel:nixos-unstable github_access_token: ${{ secrets.GITHUB_TOKEN }} - run: nix build - run: nix flake check如果你使用 Flakes只需配置github_access_token并直接执行nix build/nix flake checkNix 会自动读取 flake.nix 中锁定的输入。❓ 常见问题速答问安装速度如何Linux 上约 4 秒macOS 上约 20 秒多用户模式Linux 启用沙箱。问能配合二进制缓存吗可以。通过extra_nix_config添加substituters与trusted-public-keys即可接入任意二进制缓存大幅加速构建并实现缓存共享。问为什么拉 GitHub 会限流无 Token 访问受限。项目会自动使用默认GITHUB_TOKEN缓解此问题也可用github_access_token显式指定。问test.nix 是做什么的test.nix 是项目自身使用的测试辅助文件——它基于builtins.currentTime生成带时间戳的派生正是用来验证输入漂移导致构建不可复现这一现象的最小示例。✅ 小结用install_url把Nix 本体版本钉死用nix_path把nixpkgs钉死渠道或提交哈希用extra_nix_config统一各 Runner 的 Nix 配置三个钉用完你的 Nix 构建就真正做到了任何时间、任何机器构建结果一致。【免费下载链接】install-nix-actionInstalls Nix on GitHub Actions for the supported platforms: Linux and macOS.项目地址: https://gitcode.com/gh_mirrors/in/install-nix-action创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表