Jenkins Stashed File Parameter插件未传文件时流水线报错求助
解决Jenkins Stashed File Parameter插件未上传文件时的MissingPropertyException错误
问题根源在于:当未上传文件时,Stashed File Parameter插件不会生成uploadfile_FILENAME这个属性,直接访问该属性会触发Groovy的MissingPropertyException(旧版本插件可能默认生成空值,新版本逻辑调整后不再生成)。
以下是两种可行的解决方案:
方案一:先检查属性是否存在再取值
通过Groovy的binding.hasVariable()方法判断属性是否存在,不存在则赋值为空字符串,避免直接访问不存在的属性抛出异常:
修改后的完整流水线代码:
pipeline { agent { node { label 'Ansible_host' } } stages { stage('Precheck') { steps { // 未上传文件时unstash可能报错,添加changelog: false避免失败 unstash changelog: false, name: 'uploadfile' script{ // 先判断属性是否存在,不存在则设为空字符串 def uploadedFileName = binding.hasVariable('uploadfile_FILENAME') ? uploadfile_FILENAME : '' if ( uploadedFileName != "" ) { sh "mv uploadfile '$uploadedFileName'" echo "File is uploaded from localhost" } else { echo "File is uploaded from $source_host" } } sh "echo Im from Jenkins>/tmp/jenkinsmoht.txt" } } } }
方案二:使用try-catch捕获异常
如果需要更灵活的错误处理,可以用try-catch包裹属性访问逻辑:
script{ def uploadedFileName = '' try { uploadedFileName = uploadfile_FILENAME } catch (MissingPropertyException e) { // 未上传文件时的处理逻辑 uploadedFileName = '' } if ( uploadedFileName != "" ) { sh "mv uploadfile '$uploadedFileName'" echo "File is uploaded from localhost" } else { echo "File is uploaded from $source_host" } }
额外提示
- 未上传文件时,
unstash 'uploadfile'可能也会抛出异常,添加changelog: false参数可以让unstash在没有文件时跳过失败,继续执行后续步骤。 - 两种方案中,方案一更高效,因为提前判断属性存在性,避免了异常捕获的性能开销。
内容的提问来源于stack exchange,提问作者Ashar
相关产品推荐
相关产品推荐

