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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:13:41