在连续交付工作流程中使用nix

时间:2017-10-21 07:36:29

标签: continuous-deployment continuous-delivery nix semaphore-ci

可以在持续投放工作流程中使用nix吗?

我们正在使用semaphore作为我们的持续集成服务,现在我正在研究在成功构建时构建软件包。为此,我考虑使用nix

我不知道使用此软件包管理器设置持续交付管道的正确方法是什么。似乎这样的自动化过程将涉及:

  1. 建立nixpkgs存储库的分支(在CI服务器中)。
  2. 更新rev。{/ li>的fetchFromGithub字段
  3. (自动)提交拉动请求。
  4. 但我不知道这是否合理,而且我也担心持续交付过程涉及手动步骤(让人类接受拉动请求)。

1 个答案:

答案 0 :(得分:3)

  

可以在连续交付工作流程中使用nix吗?

是。它通常使用Hydra完成,这是一个使用Nix构建的CI系统。但是,可能可以用Semaphore做到这一点。

Semaphore CI提供了特定于语言的构建环境,但......它是running Ubuntu,所以理论上你可以这样做:

  1. 安装Nix,就像它是依赖项一样。请参阅this文章。
  2. 添加你的Nix包,我想你可以用Git做。你真的不需要克隆Nixpkgs。
  3. 使用nix-build构建您的包。这将创建一个指向构建输出的result符号链接。
  4. 使用git-deploy部署。
  5. 如果您使用包执行此类操作,可以直接从nix-build调用它,因为您不必将包依赖项作为参数提供:

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

    优化

    为每个版本安装Nix都是浪费,但也许你可以缓存Nix商店。请参阅this文章。