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

Jenkins升级至2.387.3后流水线因hudson.util.Secret转换失败

问题

将Jenkins容器从2.375.4版本升级至2.387.3版本后,流水线执行失败。先后尝试安装全新的2.387.3版本容器、jenkins/jenkins:lts镜像容器、jenkins/jenkins:lts-jdk11镜像容器,但流水线仍反复出现如下错误:

Also:   org.jenkinsci.plugins.workflow.actions.ErrorAction$ErrorId: 9675d3f6-cd62-4305-b10a-12e8c5248c96
java.lang.ClassCastException: class java.lang.String cannot be cast to class hudson.util.Secret (java.lang.String is in module java.base of loader 'bootstrap'; hudson.util.Secret is in unnamed module of loader org.eclipse.jetty.webapp.WebAppClassLoader @4d5650ae)
    at org.jenkinsci.plugins.ansible.workflow.AnsiblePlaybookStep$AnsiblePlaybookExecution.convertExtraVars(AnsiblePlaybookStep.java:390)
    at org.jenkinsci.plugins.ansible.workflow.AnsiblePlaybookStep$AnsiblePlaybookExecution.run(AnsiblePlaybookStep.java:422)
    at org.jenkinsci.plugins.ansible.workflow.AnsiblePlaybookStep$AnsiblePlaybookExecution.run(AnsiblePlaybookStep.java:352)
    at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1$1.call(AbstractSynchronousNonBlockingStepExecution.java:47)
    at hudson.security.ACL.impersonate2(ACL.java:451)
    at hudson.security.ACL.impersonate(ACL.java:463)
    at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1.run(AbstractSynchronousNonBlockingStepExecution.java:44)
    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)
Finished: FAILURE

错误发生在从TFS构建服务器向测试实验室机器复制文件的阶段,此阶段执行的Ansible PowerShell脚本会从Jenkinsfile参数部分获取参数以拉取相关文件。

补充信息:

  • 使用docker-compose安装Jenkins
  • 首次启动时安装推荐插件
  • 额外安装了Ansible和Blue Ocean插件

请问这是否为bug?是否存在绕过该问题的方案?


分析与解决方案

问题本质

这是Jenkins Ansible插件与新版本Jenkins核心的兼容性问题。convertExtraVars方法试图将String类型强制转换为hudson.util.Secret类型,通常是因为插件处理流水线参数时,敏感参数的类型逻辑未适配Jenkins 2.387.x LTS版本的核心变更。

绕过方案

  1. 降级Ansible插件版本

    • 进入Jenkins插件管理页面,找到Ansible插件,降级到与Jenkins 2.387.3兼容的旧版本(如2.16或更早版本,可参考插件更新日志验证兼容性)。新版本插件可能引入了类型处理变更,与Jenkins核心的Secret类交互逻辑出错。
  2. 修改Jenkinsfile参数传递逻辑

    • 若流水线中使用敏感参数(如令牌、密码)作为Ansible的extraVars,避免直接传递Secret对象,先转换为字符串:
      // 错误示例:直接传递Secret对象
      ansiblePlaybook(
        extraVars: [
          tfs_token: credentials('tfs-secret-id')
        ]
      )
      // 修改后:转换为字符串传递
      ansiblePlaybook(
        extraVars: [
          tfs_token: credentials('tfs-secret-id').toString()
        ]
      )
      
    • 检查Jenkins参数配置,确认普通参数未被误标记为“密码”类型,避免不必要的Secret类型转换。
  3. 回退Jenkins核心版本

    • 暂时回退到Jenkins 2.375.4版本,待Ansible插件发布兼容2.387.x的更新后再升级。使用docker-compose时,只需修改镜像标签为jenkins/jenkins:2.375.4-lts,重启容器即可。
  4. 排查插件依赖冲突

    • 进入Jenkins插件管理的“依赖关系”页面,确认Ansible插件与Blue Ocean、流水线相关插件是否存在版本冲突,尝试更新或降级冲突的依赖插件。

是否为Bug

属于Ansible插件的兼容性Bug,核心原因是Jenkins核心对hudson.util.Secret类的使用逻辑变更后,插件未同步适配,导致类型转换错误。可向插件官方提交问题反馈。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 19:24:53