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

Continuous deployment 在连续交付工作流中使用nix,continuous-deployment,continuous-delivery,nix,semaphore-ci,Continuous Deployment,Continuous Delivery,Nix,Semaphore Ci,nix能否用于连续交付工作流 我们使用的是持续集成服务,现在我正在研究如何在成功构建的基础上构建包。为此,我正在考虑使用nix 我不知道用这个包管理器设置连续交付管道的正确方法是什么。这种自动化过程似乎包括: 创建存储库的分支(在CI服务器中) 更新fetchFromGithub的rev字段 (自动)提交拉取请求 但我不知道这是否有意义,而且我担心连续交付过程涉及到手动步骤(让一个人批准拉请求) nix能否用于连续交付工作流 对。它通常是用Nix构建的CI系统来完成的。但是,使用信号量也可以做到

nix
能否用于连续交付工作流

我们使用的是持续集成服务,现在我正在研究如何在成功构建的基础上构建包。为此,我正在考虑使用
nix

我不知道用这个包管理器设置连续交付管道的正确方法是什么。这种自动化过程似乎包括:

  • 创建存储库的分支(在CI服务器中)
  • 更新
    fetchFromGithub
    rev
    字段
  • (自动)提交拉取请求
  • 但我不知道这是否有意义,而且我担心连续交付过程涉及到手动步骤(让一个人批准拉请求)

    nix能否用于连续交付工作流

    对。它通常是用Nix构建的CI系统来完成的。但是,使用信号量也可以做到这一点

    信号量CI提供特定于语言的构建环境,但。。。理论上你可以这样做:

  • 将其作为依赖项进行安装。见文章
  • 添加您的Nix包,我想您可以用Git来完成。你真的不需要克隆Nixpkgs
  • 使用
    nix build
    构建包。这将创建指向生成输出的
    结果
    符号链接
  • 使用部署
  • 如果对包执行类似操作,可以直接从
    nix build
    调用它,因为不必将包依赖项作为参数提供:

    { pkgs ? import <nixpkgs> {} }:
    let
       stdenv = pkgs.stdenv;
       ...
    in
      stdenv.mkDerivation {
        ..
      }
    
    {pkgs?导入{}}
    让
    stdenv=pkgs.stdenv;
    ...
    在里面
    stdenv.mk{
    ..
    }
    
    优化
    为每个构建安装Nix是浪费时间的,但也许您可以缓存Nix存储。参见文章。

    太好了。不过有一个问题。您将结果包发布到哪里?我希望构建的包可以提供给任何使用nix的人。啊。。。。嗯,通过提交一个pull请求将包添加到Nix packages集合中,这将触发Hydra来构建它。事实上,您将在pull请求中看到构建状态。然后,评审员将对其进行检查并批准,或者不批准。因此,是的,拉动请求批准是手动的。请注意,提交应该在主分支上。Hydra如何处理连续交付?它所做的只是运行
    nix build
    和一个web界面来查看构建日志。