You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 05:32:07