【问题标题】:What is a "jobset" in the parlance of the Hydra continuous integration tool?用 Hydra 持续集成工具的说法,什么是“作业集”?
【发布时间】:2021-10-06 07:29:19
【问题描述】:

我找到了定义(见下文)以及它们通常如何使用(即 Hydra 作业集正在跟踪 git 分支),但我仍然无法弄清楚它们在一般意义上是什么。也许你能用具体的例子来解释它的外行术语?

  • Eelco Dolstra, Eelco Visser: "Hydra: A Declarative Approach to Continuous Integration"

    Nix 表达式位置的规范,以及 Nix 表达式定义的作业的函数参数的可能值。

  • NixOS Wiki: "Hydra"

    工作集

    将要运行的作业列表。 Jobset 通常适合某个分支(master、staging、stable)。作业集由其输入定义,如果这些输入发生变化,将触发,例如就像添加到分支上的新提交一样。作业集可能相互依赖

  • Hydra User's Guide

    3.2 作业集

    一个项目可以包含多个作业集(以下简称作业集),可以单独构建的独立任务,但可能相互依赖(当然没有循环依赖)。

列出所有这些定义后,我的问题似乎毫无意义,但这里有一个例子来证明我的困惑:我查看了https://hydra.nixos.org/ 的项目列表,我的印象是项目是一个渠道,而工作集是回购中的分支。 (我知道,那里没有提到“频道”,在频道页面上甚至说"Nix channels are not supported by this Hydra server." :) 在查看Hydra project 时,我可以自欺欺人,但是当我单击flakes one 时,这个论点就崩溃了(也就是说,找不到支持的 github 存储库,但通常作业集名称不像分支名字)。

此外,在 Dolstra/Visser 论文中,Hydra 是使用 SVN 设置的;我不知道 SVN 是否甚至使用分支(主要是因为论文没有提到它们),但这确实证明了 Hydra 可以使用 VCS/SCM 而不是 git 设置,其中底层概念可能根本不同。同样,我很容易出错。

【问题讨论】:

  • 作业集实际上指定了一组表达式,以根据回购的内容进行评估。将 -small 频道与大频道进行比较;唯一的区别是在晋升之前需要成功完成的作业集的大小。
  • 并非可能从频道构建的所有内容实际上都是由 Hydra 构建的(请记住,nixpkgs 包含像 muslPkgs 这样的东西,它本身包含 所有 nixpkgs ,但针对 musl libc 而不是 glibc 编译;同样,如果我们查看总可寻址空间,它包括过时的包,例如 python38Packages,它们不再默认构建二进制文件——因为当前的默认值是3.9 - 但仍然可供真正需要它们使用的人使用)。 由 Hydra 构建的子集由作业集定义。
  • 顺便说一句,svn 用户调用分支与 git 调用分支不同。实际上,SVN 存储库是一棵巨大的树,客户端只需要检出其中的一个子集,因此在 SVN 中,/projects/foobar/trunk/projects/foobar/branches/1.2.x 可能是该总体树的两个部分,因此创建一个 1.3.x 分支离开主干看起来像 svn cp https://svn.example.com/projects/foo/trunk https://svn.example.com/projects/foo/branches/1.3.x,标记 1.3.1 可能是 svn cp "$root/projects/foo/branches/1.3.x" "$root/projects/foo/tags/1.3.1"
  • ...所以在 svn 世界中,修订控制系统只是提供了一个大版本的文件系统,而“分支”和“标签”是用户提供的语义分层。不过,上面的(re: svn details)只是一个旁白;与这里的问题没有特别的相关性。
  • (旁白:如果 git 输掉了争夺 DSCM 霸权的战争,我是少数认为世界会变得更好的人;如果技术社区再花几年时间就可以团结起来一个单一的版本控制系统, 该系统可能最终成为 Mercurial 或 Bazaar, 我们不会有破坏性的强制推送工作流之类的可恶. 这没有发生, 因为 git 是第一个在规模上具有良好性能的系统,当其他人赶上时已经太晚了)

标签: nix nix-hydra flox


【解决方案1】:

我想我在the flox documentation找到了最好的定义:

在频道内,jobsets 允许 flox 同时针对多个版本的依赖项构建包

flox 是一个围绕 Nix 生态系统构建的框架,无需安装即可使用 Nix;它将 Nix 命令无缝中继到远程 Nix 商店和 Hydra 构建农场,就好像它们是在本地机器上发出的一样,因此在安装 flox 的任何地方都可以始终获得相同的结果。

如果我理解正确的话,

  • stable 作业集随后将指定通道包的所有依赖项的最新稳定版本作为输入(例如,来自其发布分支)

  • staging / unstable 将采用依赖项(又名前沿)的开发分支(例如,master / main)的最新版本

  • 等等。

自我注意:作业集规范适用于频道中的每个包


如果以上是正确的,一些挥之不去的问题:

  • 作业集规范是什么样的?例如,stable 接受发布分支的最新提交(即HEAD),而staging/unstable 会做同样的事情,但@ 987654331@/main(或其他开发)分支?

【讨论】:

  • 任何有此领域经验的人的评论将不胜感激。不想宣传不准确的想法。
猜你喜欢
  • 2011-02-06
  • 1970-01-01
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
相关资源
最近更新 更多