Как применить конфигурацию nix-оболочки в образе докера? - PullRequest
1 голос
/ 16 октября 2019

Я пытаюсь использовать Nix как способ объединения моей локальной среды разработки и используемой сборки док-станции Gitlab CI.

У меня есть простой shell.nix, который отлично работает - яЯ могу запускать nix-shell локально и получать все, что мне нужно.

Если в моей конфигурации CI я тогда использую nixos/nix:latest в качестве своего образа докера и окружаю каждую команду nix-shell --run "xxx", что все работает. Это nix-shell повсюду утомительно поддерживать, и трудно понять, что на самом деле происходит. Что я хотел бы сделать, так это применить эту конфигурацию к образу докера в качестве первой команды, чтобы среда была доступна для всех последующих команд сборки.

Я думаю, что мне нужно что-то вроде nix-env -f shell.nix -i но это не так с «Этот вывод не предназначен для построения, прерывания».

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 17 октября 2019

Вы можете использовать buildEnv, чтобы объединить свои инструменты в одну деривацию.

default.nix :

{ pkgs ? import <nixpkgs> {} }:

pkgs.buildEnv {
  name = "my-tools";
  paths = [
    pkgs.hello
    pkgs.figlet
  ];
}

Теперь вы можете устанавливать свои инструменты вобраз докера:

nix-env -i -f default.nix

И используйте его в своем shell.nix :

{ pkgs ? import <nixpkgs> {} }:

pkgs.mkShell {
  name = "shell-dummy";
  buildInputs = [ (import ./default.nix { inherit pkgs; }) ];
}

См. также раздел 10101 * Декларативное управление пакетами в руководстве Nixpkgs.

0 голосов
/ 18 октября 2019

Это волшебная команда:

nix-env -f shell.nix -i -A buildInputs

Используется список buildInputs в mkShell в качестве списка производных для установки в среду. Это проще, но представляет собой менее четкое разделение проблем, чем ответ Роберта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...