【问题标题】:Using nix in a continuous delivery workflow在持续交付工作流程中使用 nix
【发布时间】:2018-04-02 08:02:56
【问题描述】:

nix 可以用于持续交付工作流程吗?

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

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

  1. 创建nixpkgs 存储库的分支(在 CI 服务器中)。
  2. 更新fetchFromGithubrev字段。
  3. (自动)提交拉取请求。

但我不知道这是否有意义,而且我担心持续交付过程涉及手动步骤(需要人工批准拉取请求)。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    1. 安装Nix,就好像它是一个依赖项一样。请参阅this 文章。
    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 存储。见this文章。

    【讨论】:

    • 太棒了。一个问题。您会将生成的包发布到哪里?我希望任何使用 nix 的人都可以使用构建的包。
    • 啊....好吧,通过提交拉取请求将包添加到 Nix 包集合中,这会触发 Hydra 构建它。事实上,您会在拉取请求中看到构建状态。然后审阅者会看一下并批准它,或者不批准。所以是的,拉取请求批准是手动的。旁注,提交预计将在主分支上。
    • Hydra 究竟如何处理持续交付?它所做的只是运行 nix-build 和一个用于查看构建日志的 Web 界面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 2018-12-05
    • 2012-11-20
    • 2021-10-30
    相关资源
    最近更新 更多