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

如何从文件向Jenkins传递参数列表并在Pipeline中使用

从key=value格式文件向Jenkins Pipeline传递参数的实现方案

根据你的使用场景选对应方法即可,所有方法加载的参数都可以在Pipeline全流程直接调用:

场景1:外部触发Jenkins任务时从本地参数文件传参

如果你是在本地/其他服务器上通过脚本触发Jenkins构建,直接把参数文件解析为Jenkins构建API支持的格式传递即可:

  • Jenkins的buildWithParameters接口原生支持key=value格式的参数传递,布尔参数直接传true/false字符串会被自动识别
  • 参考Shell触发脚本:
# 解析参数文件,自动跳过空行、#开头的注释行
PARAMS=$(grep -v '^#' ./params.txt | grep -v '^$' | sed 's/^/-d /' | tr '\n' ' ')
# 替换为你自己的Jenkins地址、账号、API Token、任务名
curl -X POST -u 你的Jenkins账号:你的Jenkins_API_TOKEN $PARAMS http://你的Jenkins地址/job/目标Pipeline任务名/buildWithParameters

场景2:参数文件存放在代码仓库/工作目录,Pipeline运行时加载

这是最常用的场景,推荐用官方插件实现,无插件环境也可以用原生语法处理:

方法1:用Pipeline Utility Steps插件加载(推荐)

先确保Jenkins已经安装Pipeline Utility Steps插件,绝大多数标准Jenkins环境都预装了这个插件,直接在Pipeline里用readProperties步骤解析即可:

pipeline {
    agent any
    stages {
        stage('加载参数文件') {
            steps {
                script {
                    // 解析工作目录下的params.txt
                    def paramMap = readProperties file: 'params.txt'
                    // 把所有参数写入全局环境变量,后续阶段可直接调用
                    paramMap.each { key, val ->
                        env."${key}" = val.trim()
                    }
                    // *注意:布尔类型参数需要手动转类型,避免字符串判断逻辑异常*
                    env.paramBool = env.paramBool.toBoolean()
                }
            }
        }
        stage('验证参数') {
            steps {
                echo "param1: ${env.param1}"
                echo "param2: ${env.param2}"
                script {
                    if (env.paramBool) {
                        echo "布尔参数校验通过"
                    }
                }
            }
        }
    }
}

方法2:无插件原生Groovy语法加载

如果没有权限安装插件,直接用Pipeline原生的文件读取步骤自行解析即可:

pipeline {
    agent any
    stages {
        stage('无插件加载参数') {
            steps {
                script {
                    def paramMap = [:]
                    // 逐行读取文件,跳过空行和注释
                    readFile('params.txt').split('\n').each { line ->
                        line = line.trim()
                        if (line && !line.startsWith('#')) {
                            // 按第一个=分割key和value,兼容value里带=的场景
                            def splitIdx = line.indexOf('=')
                            def key = line.substring(0, splitIdx).trim()
                            def val = line.substring(splitIdx + 1).trim()
                            paramMap[key] = val
                        }
                    }
                    // 写入环境变量
                    paramMap.each { k, v -> env."${k}" = v }
                    // 布尔类型转换
                    env.paramBool = env.paramBool.toBoolean()
                }
            }
        }
    }
}

额外说明

  • 如果需要把加载到的参数传递给下游Pipeline任务,直接传入build步骤即可:
build job: '下游任务名称', parameters: paramMap.collect { k, v -> string(name: k, value: v) }
  • 敏感参数不要明文写在参数文件里,统一存到Jenkins凭证管理中调用
  • 上述解析逻辑默认已经处理了key、value前后的多余空格,不需要额外手动清理参数文件

内容的提问来源于stack exchange,提问作者pakolela

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 22:54:25