3

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

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

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

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

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

4

1 回答 1

3

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

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

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 存储。见这篇文章。

于 2017-10-21T15:29:34.807 回答