Jenkins Scriptler插件脚本持续在Master节点运行问题排查
Jenkins流水线中Scriptler脚本在Master运行而非指定节点的问题
你的问题核心在于**input步骤的执行上下文是Jenkins Master**——无论你将它放在哪个agent块定义的流水线阶段中,input作为流水线的控制类步骤,始终由Master节点负责处理用户交互逻辑,因此嵌套在input参数中的Scriptler脚本会默认在Master节点上执行,而非你指定的node-1。
解决方案
要让目录列表的获取逻辑在node-1上执行,需将数据预获取和用户输入拆分为两个独立阶段:
- 第一阶段在
node-1上执行目录查询逻辑,将结果保存为流水线变量或环境变量; - 第二阶段使用预获取的结果作为
input步骤的选项,避免在input中直接调用需要在节点执行的脚本。
示例代码
pipeline { agent { label "node-1" } stages { stage('预获取目录列表') { steps { script { // 在node-1上执行命令获取目标目录下的列表,替换为你的实际路径 def directoryList = sh( script: 'find /your/target/path -type d | sort', returnStdout: true ).trim().split('\n') // 将列表转换为input选项需要的格式(用换行符分隔) env.DIRECTORY_CHOICES = directoryList.join('\n') } } } stage('用户选择发布目录') { steps { script { env.RELEASE_SCOPE = input( message: '请选择要发布的目录', ok: '确认发布', parameters: [ choice( name: 'list', choices: env.DIRECTORY_CHOICES, description: '可选目录列表' ) ] ) } } } } }
补充说明
如果你坚持使用UnoChoice插件的ScriptlerScript,需要注意Scriptler脚本本身默认是在Master执行的,除非脚本内部显式指定了节点执行逻辑,但这种方式会增加复杂度。相比之下,拆分阶段预获取数据的方案更简洁可靠,也符合流水线的执行逻辑。
内容的提问来源于stack exchange,提问作者igreenfield
相关产品推荐
相关产品推荐

