Jenkins调用Ansible Tower多extraVars参数时部署失败排查
问题原因及解决方法
你的报错核心是extraVars的YAML格式不合法,具体问题有两个:
- YAML语法里,键值对结尾不能加逗号(这是JSON的语法规则,YAML不需要)
- 缩进不规范,容易触发解析失败
修正方案1:用标准YAML格式传递参数
删掉每个键值对后面的逗号,统一缩进(比如每级用4个空格),修改后的代码如下:
stage("Ansible Deployment"){ steps{ script{ ansibleTower( towerServer: 'Prod Tower', towerCredentialsId: '', templateType: 'job', jobTemplate: 'Simple Test', towerLogLevel: 'full', inventory: 'Demo Inventory', removeColor: false, verbose: true, extraVars: """--- BRANCH_NAME: '${env.GIT_BRANCH}' targeted_hosts: '${env.targeted_hosts}' """ ) } } }
修正方案2:用JSON格式传递参数(规避Groovy字符串解析冲突)
如果想用JSON,要避免Groovy解析双引号时的冲突,用三个单引号包裹JSON内容即可,示例如下:
stage("Ansible Deployment"){ steps{ script{ ansibleTower( towerServer: 'Prod Tower', towerCredentialsId: '', templateType: 'job', jobTemplate: 'Simple Test', towerLogLevel: 'full', inventory: 'Demo Inventory', removeColor: false, verbose: true, extraVars: '''{ "BRANCH_NAME": "'${env.GIT_BRANCH}'", "targeted_hosts": "'${env.targeted_hosts}'" }''' ) } } }
额外说明
单个参数时没报错,是因为单个键值对后的逗号会被解析器忽略,但多个参数时,逗号会直接触发YAML语法校验失败,导致报错。
内容的提问来源于stack exchange,提问作者JoeSchmoe5018
相关产品推荐
相关产品推荐

