如何在Jenkins中为同一任务配置多组同名参数并重复运行?
在Jenkins中配置多值参数实现批量IP端口检测
当然可以!Jenkins完全支持这种多组同名参数的需求,常用的有两种方式来实现,下面给你详细说配置方法和脚本适配技巧:
1. 配置Jenkins多值参数
进入你的Jenkins任务配置页面,找到「参数化构建过程」,根据你的需求选择对应的参数类型:
- 多选参数(Multi Select Parameter):适合目标值固定的场景
- 设置参数名称为
PARAM_KEY - 在「选项」栏里一行一个填入你需要的检测目标(比如
192.168.1.1:80、10.0.0.2:443这类IP:PORT格式的值) - 运行任务时,你可以勾选多个需要检测的目标,Jenkins会把选中的值用空格拼接后传入环境变量
- 设置参数名称为
- 字符串参数(允许多行输入):适合需要临时手动输入目标的场景
- 添加字符串参数,名称同样设为
PARAM_KEY - 勾选「允许空白值」和「允许多行输入」
- 运行任务时,你可以每行输入一个检测目标,或者用空格/逗号分隔多个值
- 添加字符串参数,名称同样设为
2. 在bash脚本中处理多值参数
不管用哪种参数类型,Jenkins都会把多个值传入PARAM_KEY环境变量,你只需要在脚本里遍历这个变量即可:
方式一:遍历空格分隔的值
如果是多选参数或者用空格分隔的字符串参数,直接用for循环遍历:
#!/bin/bash # 遍历每个检测目标 for target in $PARAM_KEY; do # 拆分IP和端口(假设目标格式是IP:PORT) IP=$(echo "$target" | cut -d: -f1) PORT=$(echo "$target" | cut -d: -f2) echo "开始检测 $IP:$PORT..." # 执行telnet检测,用timeout避免长时间阻塞 timeout 5 telnet "$IP" "$PORT" > /dev/null 2>&1 if [ $? -eq 0 ]; then echo "[SUCCESS] $IP:$PORT 连通正常" else echo "[FAILED] $IP:$PORT 连通失败" fi done
方式二:处理多行输入的字符串参数
如果是用换行分隔的多行输入,用while read来逐行处理:
#!/bin/bash # 逐行读取参数值,跳过空行 echo "$PARAM_KEY" | while read -r target; do if [ -n "$target" ]; then IP=$(echo "$target" | cut -d: -f1) PORT=$(echo "$target" | cut -d: -f2) echo "开始检测 $IP:$PORT..." timeout 5 telnet "$IP" "$PORT" > /dev/null 2>&1 if [ $? -eq 0 ]; then echo "[SUCCESS] $IP:$PORT 连通正常" else echo "[FAILED] $IP:$PORT 连通失败" fi fi done
额外优化建议
如果你的检测逻辑和原来的CSV文件格式高度匹配,也可以用文本参数让用户直接输入CSV格式的内容,比如:
192.168.1.1,80 10.0.0.2,443 172.16.3.4,22
然后脚本里用逗号拆分IP和端口,完全复用你原来的CSV处理逻辑。
内容的提问来源于stack exchange,提问作者Vikki Lohana
相关产品推荐
相关产品推荐

