You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,避免传递小写值导致解析失败。
  • 临时替代文件传递方式:
    • 将inf.sh纳入代码仓库,在容器中直接拉取仓库代码并执行;
    • 若使用Kubernetes环境,通过共享PVC卷在容器间传递文件;
    • 使用copyArtifacts插件替代stash/unstash(适合同一流水线或上下游任务间传递)。
  • 排查插件依赖冲突:
    • 进入Jenkins「插件管理」->「高级」,查看artifact-manager-jclouds插件的依赖,确认是否有其他插件引入了冲突版本的jclouds库,如有可停用冲突插件或调整版本。

内容的提问来源于stack exchange,提问作者madhumita kundo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 00:25:19