2017-12-05 21 views
2

NixOpsマシンをデプロイするには、パッケージをビルドする必要があります。私は私の信頼できるプライベートHydraインスタンスで定期的に建物を作りたいと思っています。hydraでNixOpsデプロイメントを構築するには

私の現在のアプローチでは、この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 CIを使ってNixOpsのデプロイメントを構築するにはどうすればよいでしょうか。

答えて

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 
関連する問題