Jenkins内联脚本执行位置及两类Shell命令行为差异问询
Jenkins 流水线脚本执行位置详解
首先明确核心规则:
- Jenkins 流水线中的纯Groovy代码逻辑(比如变量定义、条件判断、循环)始终在控制器(Master)上执行,无论是否指定代理节点。
- 所有通过
sh/bat/powershell等步骤调用的命令或脚本,不管是内联命令还是外部脚本文件,都会在你指定的代理节点(Agent)上执行——前提是流水线已经通过agent块指定了代理。
针对你提到的两个例子:
sh "curl some-url.com":内联的curl命令会直接在当前代理节点上运行,网络请求从代理节点的网络环境发起。sh "./script-which-calls-curl.sh":该命令会调用代理节点工作目录下的脚本文件(需确保脚本已存在于代理节点,比如通过Git拉取或文件拷贝步骤上传),脚本内的curl请求同样在代理节点执行,网络请求源也是代理节点。
这两个例子的行为完全一致,都能实现把网络调用委托给代理节点的需求,不会占用控制器的网络资源。
补充注意点:
- 如果流水线未指定
agent(默认在控制器上执行),sh步骤会在控制器上运行,但这种做法不推荐——控制器应仅负责调度管理,避免承担业务执行负载。 - 代理节点执行的脚本/命令,其输出、返回值会被同步回控制器,供后续Groovy逻辑处理。
内容的提问来源于stack exchange,提问作者Donovan
相关产品推荐
相关产品推荐

