Использование nix в процессе непрерывной доставки
Можно nix
использовать в процессе непрерывной доставки?
Мы используем семафор в качестве нашей службы непрерывной интеграции, и теперь я изучаю возможность создания пакетов после успешной сборки. Для этого я рассматриваю возможность использования nix
,
Я не знаю, как правильно настроить конвейер непрерывной доставки с этим менеджером пакетов. Кажется, что такой автоматизированный процесс будет включать:
- Создание ветки репозитория nixpkgs (на сервере CI).
- Обновление
rev
полеfetchFromGithub
, - (автоматически) отправка pull-запроса.
Но я не знаю, имеет ли это смысл, и я также обеспокоен тем, что процесс непрерывной доставки включал в себя ручной этап (когда человек одобрял запрос на извлечение).
1 ответ
Можно ли использовать nix в процессе непрерывной доставки?
Да. Обычно это делается с помощью Hydra, CI-системы, построенной на Nix. Но, возможно, это удастся сделать с помощью семафора.
Semaphore CI предоставляет среды сборки, которые зависят от языка, но... он работает под управлением Ubuntu, поэтому теоретически вы можете сделать что-то вроде этого:
- Установите Nix, как если бы это была зависимость. Смотрите эту статью.
- Добавьте свой пакет Nix, который, я полагаю, вы можете сделать с Git. Вам не нужно клонировать Nixpkgs.
- использование
nix-build
построить свой пакет. Это создастresult
символическая ссылка на вывод сборки. - Разверните с помощью git-deploy.
Если вы делаете что-то подобное со своим пакетом, вы можете позвонить прямо из nix-build
потому что вам не нужно предоставлять зависимости пакета в качестве аргументов:
{ pkgs ? import <nixpkgs> {} }:
let
stdenv = pkgs.stdenv;
...
in
stdenv.mkDerivation {
..
}
оптимизация
Установка Nix для каждой сборки расточительна, но, возможно, вы можете кэшировать хранилище Nix. Смотрите эту статью.