在持续交付工作流中使用 nix
Using nix in a continuous delivery workflow
能否在持续交付工作流中使用nix
?
我们正在使用 semaphore 作为我们的持续集成服务,现在我正在研究在成功构建后构建包。为此,我正在考虑使用 nix
。
我不知道用这个包管理器设置持续交付管道的正确方法是什么。似乎这样的自动化过程将涉及:
- 创建 nixpkgs 存储库的分支(在 CI 服务器中)。
- 正在更新
fetchFromGithub
的 rev
字段。
- (自动)提交拉取请求。
但我不知道这是否有意义,而且我担心持续交付过程涉及手动步骤(让人批准拉取请求)。
Can nix be used in a continuous-delivery workflow?
是的。它通常使用 Hydra,一个使用 Nix 构建的 CI 系统来完成。但是,可能可以用 Semaphore 做到这一点。
Semaphore CI 提供特定于语言的构建环境,但是......它是 running Ubuntu,所以理论上你可以这样做:
- 安装 Nix as if it were a dependency. See this 文章。
- 添加你的 Nix 包,我想你可以用 Git 来完成。你真的不需要克隆 Nixpkgs。
- 使用
nix-build
构建您的程序包。这将为构建输出创建一个 result
符号 link。
- 使用 git-deploy 部署。
如果你对你的包做这样的事情,你可以直接从 nix-build
调用它,因为你不必提供包依赖项作为参数:
{ pkgs ? import <nixpkgs> {} }:
let
stdenv = pkgs.stdenv;
...
in
stdenv.mkDerivation {
..
}
优化
为每个构建安装 Nix 是一种浪费,但也许您可以缓存 Nix 存储。请参阅 this 文章。
能否在持续交付工作流中使用nix
?
我们正在使用 semaphore 作为我们的持续集成服务,现在我正在研究在成功构建后构建包。为此,我正在考虑使用 nix
。
我不知道用这个包管理器设置持续交付管道的正确方法是什么。似乎这样的自动化过程将涉及:
- 创建 nixpkgs 存储库的分支(在 CI 服务器中)。
- 正在更新
fetchFromGithub
的rev
字段。 - (自动)提交拉取请求。
但我不知道这是否有意义,而且我担心持续交付过程涉及手动步骤(让人批准拉取请求)。
Can nix be used in a continuous-delivery workflow?
是的。它通常使用 Hydra,一个使用 Nix 构建的 CI 系统来完成。但是,可能可以用 Semaphore 做到这一点。
Semaphore CI 提供特定于语言的构建环境,但是......它是 running Ubuntu,所以理论上你可以这样做:
- 安装 Nix as if it were a dependency. See this 文章。
- 添加你的 Nix 包,我想你可以用 Git 来完成。你真的不需要克隆 Nixpkgs。
- 使用
nix-build
构建您的程序包。这将为构建输出创建一个result
符号 link。 - 使用 git-deploy 部署。
如果你对你的包做这样的事情,你可以直接从 nix-build
调用它,因为你不必提供包依赖项作为参数:
{ pkgs ? import <nixpkgs> {} }:
let
stdenv = pkgs.stdenv;
...
in
stdenv.mkDerivation {
..
}
优化
为每个构建安装 Nix 是一种浪费,但也许您可以缓存 Nix 存储。请参阅 this 文章。