部署我的NixOps机器需要很多时间,因为需要构建软件包。我想定期在我信任的私人Hydra实例上进行建设。
我当前的方法涉及这个release.nix
文件,但它没有那么好用。
{ nixpkgs ? <nixpkgs>, onlySystem ? true, extraModules ? [] }:
let
nixos = import "${nixpkgs}/nixos";
buildEnv = conf: (nixos {
configuration = conf;
});
buildTarget = m: let build = buildEnv (buildConf m); in
if onlySystem then build.system else build.vm;
buildConf = module: { ... }:
{
imports = [ module ] ++ extraModules;
};
in
{
machine1 = buildTarget ./machine1/configuration.nix;
machine2 = buildTarget ./machine2/configuration.nix
machine3 = buildTarget ./machine3/configuration.nix
machine4 = buildTarget ./machine4/configuration.nix
}
我真的不明白这段代码,因为我是从here复制的。
如果我在本地运行nix-build release.nix
,这样可以很好地构建,但是对于hydra,我从来没有完全构建。有时构建不会出列(它们只是不构建),有时它们会因各种错误消息而失败。由于没有任何九头蛇问题是可重现的(除了事实,我从来没有得到完整版本),我想知道构建NixOps部署的最佳实践是什么。
请注意,我的部署中有unfree
个软件包。选项nixpkgs.config.allowUnfree = true;
在hydra服务器上设置。
这不是关于我的九头蛇失败的问题,而是关于用Hydra CI构建NixOps部署的好方法。
答案 0 :(得分:1)
据我所知,没有办法让这很容易。你的代码看起来不错,但我的方法略有不同。我只构建toplevel
属性,并以不同方式构建NixOS配置。
我使用类似的东西从内部构建NixOS'装置':
let
modules = [ ./configuration.nix ];
nixosSystem = import (pkgs.path + "/nixos/lib/eval-config.nix") {
inherit (pkgs) system;
inherit modules;
};
in
nixosSystem.config.system.build.toplevel