Jenkins流水线:代理 vs 节点?

196
在Jenkins pipeline中,agentnode有什么区别?
我找到了以下定义:
  • Node:在一个或多个声明的节点步骤的上下文中,Pipeline执行大部分工作。
  • Agent:代理指令根据其放置位置,在Jenkins环境中指定整个Pipeline或特定阶段将在何处执行。
因此,两者都用于执行管道步骤。但是要使用哪个呢?
1个回答

213
简单来说,Agent 用于声明式流水线,而 node 用于脚本式流水线。
在声明式流水线中,agent 指令用于指定任务/作业执行的代理/从属节点。该指令只允许您指定任务执行的位置,即代理、从属节点、标签或 Docker 镜像。
另一方面,在脚本式流水线中,node 步骤可用于在特定代理、标签或从属节点上执行脚本/步骤。 node 步骤可选地需要代理或标签名称,然后是一个闭包,其中包含要在该节点上执行的代码。 声明式和脚本式流水线(基于评论进行编辑):
  • 声明式流水线 是管道 DSL 的新扩展(它基本上是一个带有一个步骤的管道脚本,具有参数(称为指令)的管道步骤,这些指令应遵循特定语法。这种新格式的重点在于它更严格,因此对于那些新手来说应该更容易,允许图形编辑等等。
  • 脚本式流水线 是高级需求的后备。

6
是的和否的声明式流水线是管道DSL的新扩展(它基本上是一个只有一步的管道脚本,具有参数的管道步骤(称为指令),这些指令应遵循特定的语法)。这种新格式的重点在于它更加严格,因此对于那些刚接触流水线的人来说应该更容易,可以进行图形化编辑等,详见您上面的链接中的功能列表。因此,对于简单的任务,我会说这是推荐的方法,但对于更高级的情况,脚本是备选方案。 - Jon S
9
现在有三个名称,分别是“node”、“agent”和“slave”! - mkobit
2
@mkobit 是的,这些名称相当令人困惑。我在某处读到(现在无法找到参考资料,可能是在 Jenkins 博客或 Jenkins JIRA 上),他们正在尝试重命名并使用代理(agent)而不是从机(slave),因为后者是一个“负面”词汇。然后我猜声明性流水线采用了这种方式,并将其称为代理(agent)。我认为节点(node)起源于脚本化流水线。 - Jon S
2
“Agent 用于声明性流水线,而 node 用于脚本。” 这似乎是不正确的。如果有一个使用语法 agent { node { label "abc" } } 的声明性 Jenkinsfile 呢?很明显,node 也适用于声明性流水线。那么,真正的区别是什么呢? - cowlinator
3
如果能展示在远程代理上执行阶段或节点的示例,这个答案会更好。我仍在尝试找到使用脚本化流水线与远程代理实际配合的语法。而官方文档并没有提供答案(像往常一样)。 - Peter Moore
显示剩余10条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接