erictapen
erictapen

Reputation: 598

How to build a NixOps deployment on hydra

Deploying my NixOps machines takes alot of time, as packages need to build. I want to do the building regularly on my trusted private Hydra instance.

My current approach involves this release.nix file, but it doesn't work out so well.

{ 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 
}

I don't really understand this code, as I copied it from here.

This builds fine if I run nix-build release.nix locally, but on hydra I never get a full build. Sometimes builds don't dequeue (they just don't get build), sometimes they fail with various error messages. As nothing of the hydra problems are reproducible (beside the fact, that I never get a full build), I wonder what the best practice for building a NixOps deployment is.

Please note, that I have unfree packages in my deployment. The option nixpkgs.config.allowUnfree = true; is set on the hydra server.

This is not a question about my hydra failures, but about what would be a good way to build a NixOps deployment with Hydra CI.

Upvotes: 2

Views: 836

Answers (1)

Robert Hensing
Robert Hensing

Reputation: 7359

As far as I know, there is no way to make this super easy. Your code looks ok, but my method is a slightly different. I only build the toplevel attribute and I construct the NixOS configuration differently.

I build NixOS 'installations' from inside Nix using something like:

let
  modules = [ ./configuration.nix ];
  nixosSystem = import (pkgs.path + "/nixos/lib/eval-config.nix") {
      inherit (pkgs) system;
      inherit modules;
    };
in
  nixosSystem.config.system.build.toplevel

Upvotes: 1

Related Questions