如何在hydra上构建NixOps部署

时间:2017-12-05 14:07:41

标签: nix nixos

部署我的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部署的好方法。

1 个答案:

答案 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