詹金斯管道:代理与节点?
Posted
技术标签:
【中文标题】詹金斯管道:代理与节点?【英文标题】:Jenkins pipeline: agent vs node? 【发布时间】:2017-06-22 09:10:00 【问题描述】:jenkins 管道中的 agent 和 node 有什么区别?
我找到了这些定义:
Node:管道在一个或多个声明的节点步骤的上下文中执行大部分工作。 Agent:agent 指令指定整个 Pipeline 或特定阶段在 Jenkins 环境中的执行位置,具体取决于 agent 指令的放置位置。因此两者都用于执行管道步骤。但是什么时候用哪一个呢?
【问题讨论】:
【参考方案1】:简单的答案是,Agent 适用于 declarative 管道,node 适用于 scripted 管道。
在声明式管道中,agent 指令用于指定要在哪个代理/从属设备上执行作业/任务。该指令只允许你指定任务将在哪里执行,代理、从属、标签或 docker 映像。
另一方面,在脚本化管道中,node 步骤可用于在特定代理、标签、从属设备上执行脚本/步骤。 node 步骤可选地采用代理或标签名称,然后是带有要在该节点上执行的代码的闭包。
声明式和脚本式管道(根据评论进行编辑):
declarative pipelines 是管道 DSL 的新扩展(它基本上是一个只有一步的管道脚本,一个带有参数的管道步骤(称为指令),这些指令应该遵循特定的语法。这种新格式的要点在于它更严格,因此对于管道新手来说应该更容易,允许图形编辑等等。 scripted pipelines 是高级需求的后备。【讨论】:
Yes and no 声明式管道是管道 DSL 的新扩展(它基本上是一个只有一步的管道脚本,一个带有参数的管道步骤(称为指令),这些指令应该遵循特定的语法.这种新格式的要点是它更严格,因此对于管道新手来说应该更容易,允许图形编辑等等,请参阅上面链接上的功能列表。所以对于简单的任务,我会说它是推荐的方法,但对于更高级的情况,脚本化是后备。 现在有node
、agent
和slave
三个名字!
@mkobit 是的,名字很混乱,我在某个地方读到过(现在找不到参考,无论是在 Jenkins 博客上还是在 Jenkins JIRA 上),他们正试图重命名并使用代理而不是奴隶,因为它不是“否定”词。然后我猜声明式管道采用了它并将其称为代理。我认为,节点源自脚本化管道。
@DenCowboy 啊哈,是的,我想说那里的第四个最佳实践只适用于脚本化管道,因为声明性总是分配一个节点,代理指令只限制分配哪个节点。
@DenCowboy 不应该使用相同的,它只是使用代理指令来初步确定要使用的代理/从站。以上是关于詹金斯管道:代理与节点?的主要内容,如果未能解决你的问题,请参考以下文章
詹金斯。指定的代理类型“docker”无效。必须是 [any, label, none] 之一