Jenkins Pipeline中检测上传文件真实编码(验证ANSI)遇Groovy错误
Jenkins Pipeline验证文件是否为ANSI编码解决方案
错误原因
你遇到的hudson.remoting.ProxyException: groovy.lang.MissingPropertyException: No such property: file for class: WorkflowScript异常,本质是Jenkins Pipeline禁止直接使用java.io.File、FileInputStream这类本地IO类导致的。Pipeline采用分布式执行架构,控制器JVM无法直接访问代理节点的文件系统,直接实例化这些类会引发权限或路径错误。
正确实现方式
借助Shell命令file -i可直接检测文件编码,ANSI编码在不同系统对应ISO-8859-1或CP1252,以下是修正后的Pipeline代码:
stage("验证上传文件编码") { steps { unstash 'scriptMajbase' script { def targetFilePath = "${WORKSPACE}/scriptMajbase.txt" // 重命名文件 fileOperations([fileRenameOperation(destination: targetFilePath, source: "scriptMajbase")]) // 检查文件是否存在 if (fileExists(targetFilePath)) { // 执行shell命令获取编码信息 def encodingResult = sh(script: "file -i ${targetFilePath}", returnStdout: true).trim() echo "编码检测结果:${encodingResult}" // 判断是否为ANSI兼容编码 if (encodingResult.contains("charset=iso-8859-1") || encodingResult.contains("charset=cp1252")) { echo "文件编码符合要求:ANSI" } else { error "文件编码不符合要求,当前编码检测结果为${encodingResult}" } } else { error "目标文件不存在:${targetFilePath}" } } } }
补充说明
file -i命令会输出文件的MIME类型和编码信息,跨平台兼容性较好。- 若代理节点是Windows系统,可改用PowerShell命令检测:
$encoding = (Get-Content -Path "${targetFilePath}" -Raw).Encoding.BodyName echo "文件编码:${encoding}"
内容的提问来源于stack exchange,提问作者Rohit19j91
相关产品推荐
相关产品推荐

