如何在Jenkins中获取用户上传文件的原始文件名?
问题
已创建一条从本地向代理节点上传文件的Jenkins流水线,当前使用Stashed File Parameter设置的固定文件名,希望直接使用用户上传的原始文件名,同时移除现有流水线中的string类型参数(filename)。现有脚本可正常运行,需要调整实现上述需求。
原流水线参数配置:仅包含一个名为inputFile的Stashed File类型参数,用于上传文件。
原流水线脚本:
import java.text.SimpleDateFormat parameters { stashedFile(name: 'inputFile', description: 'upload file') string(name: 'filename',defaultValue: 'uploadFile', description: 'filename') } node('test') { stage('upload file') { unstash 'inputFile' script { def fileName = params.filename if (fileName == "uploadFile"){ def now = java.time.LocalDateTime.now() fileName = fileName + "${now}" } def status = sh(script: "mv ./inputFile /tmp/${fileName}", returnStatus: true) if (status != 0) { currentBuild.result = 'FAILURE' error "can't upload file" } } } }
解决方案
Jenkins的Stashed File Parameter会自动保留用户上传文件的原始文件名元数据,无需额外参数传递。只需通过params.inputFile.originalFileName即可直接获取原始文件名,修改后的流水线脚本如下:
parameters { stashedFile(name: 'inputFile', description: 'upload file') } node('test') { stage('upload file') { unstash 'inputFile' script { // 获取上传文件的原始文件名,若为空则用时间戳生成默认文件名 def fileName = params.inputFile?.originalFileName ?: "uploadFile_${java.time.LocalDateTime.now()}" def status = sh(script: "mv ./inputFile /tmp/${fileName}", returnStatus: true) if (status != 0) { currentBuild.result = 'FAILURE' error "无法上传文件" } } } }
关键说明:
- 移除了冗余的
string类型参数filename,简化参数配置 - 通过
params.inputFile?.originalFileName安全获取原始文件名,使用?.避免空指针异常 - 保留了原逻辑中的默认文件名兜底:如果原始文件名获取失败(极端情况),自动生成带时间戳的文件名,避免上传失败
内容的提问来源于stack exchange,提问作者Cyp
相关产品推荐
相关产品推荐

