Как построить развертывание NixOps на Hydra

Развертывание моих машин 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 
}

Я не очень понимаю этот код, поскольку я скопировал его отсюда.

Это хорошо работает, если я бегу nix-build release.nix локально, но на гидре я никогда не получаю полную сборку. Иногда сборки не снимаются с очереди (они просто не получают сборку), иногда они терпят неудачу с различными сообщениями об ошибках. Поскольку ничто из проблем с гидрой не воспроизводимо (помимо того факта, что я никогда не получаю полную сборку), мне интересно, каков наилучший способ построения развертывания NixOps.

Обратите внимание, что у меня есть unfree пакеты в моем развертывании. Опция nixpkgs.config.allowUnfree = true; установлен на сервере гидра.

Дело не в моих сбоях в работе гидры, а в том, что было бы хорошим способом построить развертывание NixOps с помощью Hydra CI.

1 ответ

Насколько я знаю, нет никакого способа сделать это супер легко. Ваш код выглядит нормально, но мой метод немного другой. Я только строю toplevel атрибут и я строю конфигурацию NixOS по-разному.

Я строю 'установки' NixOS изнутри Nix, используя что-то вроде:

let
  modules = [ ./configuration.nix ];
  nixosSystem = import (pkgs.path + "/nixos/lib/eval-config.nix") {
      inherit (pkgs) system;
      inherit modules;
    };
in
  nixosSystem.config.system.build.toplevel
Другие вопросы по тегам