Jenkins 工作区是在主节点上还是在辅助节点上?



谁实际克隆项目,是主节点还是代理节点?如果是主节点,则代理节点如何实际执行作业。如果是代理节点,我们如何在浏览器中查看工作区?

当人们问"工作区在哪里"时,答案通常是路径,但我更感兴趣的是路径在哪里,在主节点还是代理节点上?或者两者兼而有之?

编辑1

与此对齐的术语:https://jenkins.io/doc/book/glossary/以避免混淆。

在 Jenkins 设置中,所有机器都被视为节点。主节点连接到一个或多个代理节点。执行程序可以在主节点或代理节点上运行。

在我的方案中,没有执行程序在主服务器上运行。它们仅在代理节点上运行。

答案是:视情况而定!

首先,虽然这不是IMO的好做法,但一些安装让主人成为实际的工人并运行工作。在这种情况下,工作区将位于主节点上。

如果将主节点配置为不接受作业,则有时仍然可以在主节点上创建工作区。一个很好的例子是,当你的工作是"来自 SCM 的管道脚本"时。在这种情况下,主节点将为作业创建一个工作区,克隆目标存储库,读取管道,并在任何目标从属服务器上启动所需的作业,从而创建一个工作区来运行操作本身。如果管道面向多个从属服务器,则每个从属服务器上都有一个工作区。

在简单的情况下(例如 maven 或自由式作业(,工作区将仅在目标从属服务器上。

我需要更深入地挖掘才能理解这一点。

  1. 我运行了一个全新的 Jenkins 实例,并附加了一个代理节点。我使用了SSH,并将远程(代理(根目录设置为:/home/igorski/jenkins
  2. 一旦我附加了节点,远程处理文件夹和远程处理.jar就会出现在该根目录中。
  3. 我运行了一个基本的 Gradle Java 管道作业(项目中的 Jenkinsfile(。
  4. 工作区出现在从属设备上。不在主人身上。
  5. 从 Jenkins GUI 中,我可以访问工作区并查看其内容。
  6. 在我杀死代理机器的那一刻,我无法再查看 Jenkins 中的工作区。

我的猜测是,远程.jar以某种方式进行了实时同步。

我也运行了一个自由式项目,我可以确认这一点。一旦代理被杀死,我就无法再打开工作区,并且出现错误堆栈跟踪:

hudson.remoting.Channel$CallSiteStackTrace: Remote call to JenkoOne

不过,这在管道作业中更为明显。在那里,您将获得指向代理的链接,您需要单击该链接才能查看内容。代理消失后,链接将被禁用。而且您确切地知道节点位于哪个代理上。使用自由式作业,您只需获得工作区链接。没有指示它是什么代理,或者目前是否可以访问代理。

所以,ZeitounatorFabian都是对的。

最新更新