Jenkins流水线容器内执行unstash报错:No enum constant standard
Jenkins流水线unstash报错修复方案与问题分析
问题重现
执行以下Jenkins流水线代码时触发报错:
stash(includes: 'inf.sh', name: 'inf') stage('abc') { container('inf') { unstash(name: 'inf') sh "inf.sh" } }
此前代码运行正常,未做代码变更,尝试升级AWS插件、置空inf.sh后问题仍存在。
报错堆栈
java.lang.IllegalArgumentException: No enum constant org.jclouds.s3.domain.ObjectMetadata.StorageClass.standard at java.base/java.lang.Enum.valueOf(Enum.java:240) at org.jclouds.s3.domain.ObjectMetadata$StorageClass.valueOf(ObjectMetadata.java:36) at org.jclouds.s3.functions.ParseObjectMetadataFromHeaders.apply(ParseObjectMetadataFromHeaders.java:81) at org.jclouds.s3.functions.ParseObjectFromHeadersAndHttpContent.apply(ParseObjectFromHeadersAndHttpContent.java:48) at org.jclouds.s3.functions.ParseObjectFromHeadersAndHttpContent.apply(ParseObjectFromHeadersAndHttpContent.java:34) at org.jclouds.rest.internal.InvokeHttpMethod.invoke(InvokeHttpMethod.java:91) at org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:74) at org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:45) at org.jclouds.rest.internal.DelegatesToInvocationFunction.handle(DelegatesToInvocationFunction.java:156) at org.jclouds.rest.internal.DelegatesToInvocationFunction.invoke(DelegatesToInvocationFunction.java:123) at com.sun.proxy.$Proxy146.getObject(Unknown Source) at org.jclouds.s3.blobstore.S3BlobStore.getBlob(S3BlobStore.java:235) at org.jclouds.blobstore.internal.BaseBlobStore.getBlob(BaseBlobStore.java:217) at io.jenkins.plugins.artifact_manager_jclouds.JCloudsArtifactManager.unstash(JCloudsArtifactManager.java:294) at org.jenkinsci.plugins.workflow.flow.StashManager.unstash(StashManager.java:155) at org.jenkinsci.plugins.workflow.support.steps.stash.UnstashStep$Execution.run(UnstashStep.java:78) at org.jenkinsci.plugins.workflow.support.steps.stash.UnstashStep$Execution.run(UnstashStep.java:65) at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:47) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:829)
问题根因
报错核心是jclouds库在解析S3对象元数据时,无法识别小写的standard存储类枚举值。jclouds中StorageClass枚举的有效值为大写形式(如STANDARD),但插件或Jenkins配置中传递了小写的standard,导致枚举匹配失败。
该问题直接关联Jenkins的Artifact Manager on cloud(artifact-manager-jclouds)插件,因为stash/unstash操作通过该插件依赖jclouds实现S3存储交互。
修复方案
- 升级/回退
Artifact Manager on cloud插件:- 若插件近期自动更新,回退到之前稳定运行的版本;若版本过旧,升级至最新稳定版,新版本通常会修复jclouds的兼容问题。
- 修正Jenkins S3存储类配置:
- 进入Jenkins全局配置,找到S3工件存储的设置项,确认存储类配置为大写的
STANDARD,避免传递小写值导致解析失败。
- 进入Jenkins全局配置,找到S3工件存储的设置项,确认存储类配置为大写的
- 临时替代文件传递方式:
- 将
inf.sh纳入代码仓库,在容器中直接拉取仓库代码并执行; - 若使用Kubernetes环境,通过共享PVC卷在容器间传递文件;
- 使用
copyArtifacts插件替代stash/unstash(适合同一流水线或上下游任务间传递)。
- 将
- 排查插件依赖冲突:
- 进入Jenkins「插件管理」->「高级」,查看
artifact-manager-jclouds插件的依赖,确认是否有其他插件引入了冲突版本的jclouds库,如有可停用冲突插件或调整版本。
- 进入Jenkins「插件管理」->「高级」,查看
内容的提问来源于stack exchange,提问作者madhumita kundo
相关产品推荐
相关产品推荐

