如何将Jenkins的file参数值传递给下游流水线任务
你提到的JENKINS-27413号缺陷目前仍未完全修复,核心问题是Jenkins流水线的build步骤原生不支持文件参数的序列化传输,直接构造FileParameterValue对象的写法会频繁出现空文件、路径读取失败、权限报错等问题。
以下是3种可行的解决方案,按稳定性从高到低排序:
方案1:使用stash/unstash传递文件(同Jenkins实例最推荐)
这是官方推荐的替代方案,完全避开文件参数的缺陷:
- 上游流水线代码:
// 先把目标csv文件 stash 起来 stash name: "test-csv", includes: env.filepath // 调用下游任务 build job: "DownstreamJobName", parameters: [ string(name: 'Releases', value: "1.2.9"), string(name: 'UserEmail', value: "testemail") ], wait: true
- 下游流水线开头添加unstash逻辑即可拿到文件:
node { // 拉取上游stash的csv文件 unstash "test-csv" // 后续直接读取对应路径的csv文件即可 }
方案2:转Base64字符串传递(兼容性最高,跨实例/跨节点都适用)
如果是跨Jenkins实例或者不想用stash,可以把文件内容转成Base64编码当字符串参数传递,下游解码还原文件:
- 上游流水线代码:
// 读取csv文件并转Base64 def csvContent = readFile env.filepath def csvBase64 = csvContent.bytes.encodeBase64().toString() // 调用下游任务 build job: "DownstreamJobName", parameters: [ string(name: 'Releases', value: "1.2.9"), string(name: 'testCsvBase64', value: csvBase64), string(name: 'UserEmail', value: "testemail") ]
- 下游流水线还原文件代码:
// 解码Base64写入csv文件 def csvContent = new String(params.testCsvBase64.decodeBase64()) writeFile file: "test.csv", text: csvContent // 后续正常使用test.csv即可
方案3:修正FileParameterValue写法(仅适合必须用文件参数的场景)
如果下游任务必须接收文件类型参数,可以调整写法,需要提前安装2.15及以上版本的Pipeline: Build Step插件:
build job: "DownstreamJobName", parameters: [ string(name: 'Releases', value: "1.2.9"), base64File(name: "test.csv", file: "${env.WORKSPACE}/${env.filepath}"), string(name: 'UserEmail', value: "testemail") ]
注意事项:
- 下游任务必须提前定义好名为
test.csv的文件类型参数 - 上下游任务需要运行在同一个节点,否则会出现文件找不到的问题
内容的提问来源于stack exchange,提问作者reachit
相关产品推荐
相关产品推荐

