Использование nix в процессе непрерывной доставки

Можно nix использовать в процессе непрерывной доставки?

Мы используем семафор в качестве нашей службы непрерывной интеграции, и теперь я изучаю возможность создания пакетов после успешной сборки. Для этого я рассматриваю возможность использования nix,

Я не знаю, как правильно настроить конвейер непрерывной доставки с этим менеджером пакетов. Кажется, что такой автоматизированный процесс будет включать:

  1. Создание ветки репозитория nixpkgs (на сервере CI).
  2. Обновление rev поле fetchFromGithub,
  3. (автоматически) отправка pull-запроса.

Но я не знаю, имеет ли это смысл, и я также обеспокоен тем, что процесс непрерывной доставки включал в себя ручной этап (когда человек одобрял запрос на извлечение).

1 ответ

Решение

Можно ли использовать nix в процессе непрерывной доставки?

Да. Обычно это делается с помощью Hydra, CI-системы, построенной на Nix. Но, возможно, это удастся сделать с помощью семафора.

Semaphore CI предоставляет среды сборки, которые зависят от языка, но... он работает под управлением Ubuntu, поэтому теоретически вы можете сделать что-то вроде этого:

  1. Установите Nix, как если бы это была зависимость. Смотрите эту статью.
  2. Добавьте свой пакет Nix, который, я полагаю, вы можете сделать с Git. Вам не нужно клонировать Nixpkgs.
  3. использование nix-build построить свой пакет. Это создаст result символическая ссылка на вывод сборки.
  4. Разверните с помощью git-deploy.

Если вы делаете что-то подобное со своим пакетом, вы можете позвонить прямо из nix-build потому что вам не нужно предоставлять зависимости пакета в качестве аргументов:

{ pkgs ? import <nixpkgs> {} }:
let
   stdenv = pkgs.stdenv;
   ...
in
  stdenv.mkDerivation {
    ..
  }

оптимизация

Установка Nix для каждой сборки расточительна, но, возможно, вы можете кэшировать хранилище Nix. Смотрите эту статью.

Другие вопросы по тегам