Jenkins多选参数配合Publish over SSH插件多服务器传文件失败求助
Jenkins Publish over SSH 多选服务器传输失败解决方法
故障原因
Publish over SSH 插件的标签匹配逻辑基于正则表达式实现,不支持直接识别逗号分隔的多服务器名拼接字符串。当多选参数传入server1,server3格式的值时,插件会把这整串字符当成单个匹配规则,逐一和每台服务器配置的Label做比对,没有任何单台服务器的Label能匹配上整串逗号拼接的内容,就会出现全部节点被跳过的报错。
配置步骤
两种配置方案二选一即可,不需要额外安装其他插件:
方案一:修改参数分隔符(推荐,配置最简单)
- 打开任务配置页,找到已创建的Extended Choice Parameter配置项,把delimiter(分隔符)从原来的逗号
,改成竖线|,保存参数配置。竖线在正则规则里代表“或”逻辑,正好适配插件的匹配规则。 - 下拉到Publish over SSH配置区域,给每台已经配置好的SSH服务器补充填写
Label字段,字段值必须和Extended Choice Parameter里的可选值完全一致,不要加多余空格、特殊字符:比如对应第一台服务器填server1,第二台填server2。 - 点开Publish over SSH配置栏的「高级」选项,找到Parameterized publishing(参数化发布)开关并勾选,在Label表达式输入框中直接引用已创建的多选参数变量,比如参数名为
TARGET_SERVERS就填${TARGET_SERVERS},保存任务配置即可。
方案二:保留原有逗号分隔符配置(适配已有流程不想改参数规则的场景)
不需要修改Extended Choice Parameter的原有逗号分隔配置,只需要在填写Label表达式引用参数时,用Jenkins内置的字符串替换语法,把参数值里的逗号自动替换成竖线即可,表达式写法如下:
${TARGET_SERVERS.replace(',', '|')}
其余服务器Label配置、参数化发布开关的配置和方案一完全一致。
验证逻辑
配置完成后执行构建,同时选中多台服务器时,传入插件的标签表达式会变成server1|server3格式,插件会自动匹配所有Label命中该正则规则的服务器,依次完成文件传输,不会再出现节点被跳过的问题。
故障场景典型控制台报错:
20:01:28 SSH: Skipping [server1] - Label [server1] does not match expression [server1,server3] 20:01:28 SSH: Skipping [server2] - Label [server2] does not match expression [server1,server3] 20:01:28 SSH: Skipping [server3] - Label [server3] does not match expression [server1,server3]
内容的提问来源于stack exchange,提问作者Maverick1604
相关产品推荐
相关产品推荐

