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

Jenkins升级至2.387.3后调用Ansible Playbook传参失败

Jenkins升级至2.387.3后Ansible Playbook传递加密extraVars报错

问题场景

升级Jenkins到2.387.3版本后,使用声明式流水线调用Ansible Playbook,传递包含加密字段的extraVars参数时触发类型转换错误。

流水线代码片段

ansiblePlaybook([ 
        become: false, 
        colorized: true, 
        installation: 'ansible', 
        extraVars: [
            login: 'mylogin',
            secret_key: [value: 'g4dfKWENpeF6pY05', hidden: true]
        ],                      
        playbook: 'src/main/ansible/prova_parametri.yml'
   ])

报错信息(翻译后)

java.lang.ClassCastException: java.lang.String类无法转换为hudson.util.Secret类
(java.lang.String位于引导类加载器的java.base模块中;hudson.util.Secret位于org.eclipse.jetty.webapp.WebAppClassLoader @76908cc0的未命名模块中)
	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)

原因分析

Jenkins 2.387.x LTS版本对hudson.util.Secret类型的处理逻辑进行了调整,旧流水线写法直接传入字符串作为加密字段的value,无法被Ansible插件正确转换为Secret类型,从而触发类型转换异常。

解决方案

方案1:将字符串转换为Secret类型

在流水线中使用Secret.fromString()方法将明文字符串转换为Secret类型后传入:

ansiblePlaybook([ 
        become: false, 
        colorized: true, 
        installation: 'ansible', 
        extraVars: [
            login: 'mylogin',
            secret_key: [value: Secret.fromString('g4dfKWENpeF6pY05'), hidden: true]
        ],                      
        playbook: 'src/main/ansible/prova_parametri.yml'
   ])

注意:生产环境不建议硬编码明文密钥,推荐从Jenkins凭据管理中获取已存储的Secret对象直接传入。

方案2:升级Ansible插件

检查并升级Jenkins的Ansible插件到最新适配版本,部分新版本插件已针对Jenkins 2.387.x的Secret类型变更做了兼容处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 16:52:38