通过Curl触发远程Jenkins参数化构建时参数传递异常排查
问题:跨Jenkins实例触发参数化构建时参数传递异常
场景说明
我维护两个Jenkins实例,需求是Jenkins1构建完成后,自动触发Jenkins2上的参数化构建——Jenkins2的构建会调用Ansible Playbook执行SVN更新,需要用户输入三个参数:
- String类型参数:
USER(SVN用户名) - Password类型参数:
PASS(SVN密码) - String类型参数:
REVISION(SVN版本号)
配置与问题现象
- Jenkins1的Post Build触发脚本(已能成功触发Jenkins2构建):
curl POST http://JENKINS2:8080/job/test/buildWithParameters \ --user user:token \ --data "REVISION=$REVISION" \ --data "USER=$USER" \ --data "PASS=$PASS"
- 异常表现:Jenkins2的构建日志里,参数被替换成了随机编码字符串,而非实际传入的值:
/usr/bin/ansible-playbook test.yml -f 5 --private-key /tmp/ssh.key -u jenkins \ -e user={AQAAABAAAAAQdPfG8ioIGy+FX2QsIG/P/SS5O5YIEmnUK/8l/jKF8Ac=} \ -e ******** \ -e revision={AQAAABAAAAAQPhzpgyl6n5lTlOcOFzy8yr8F8AvvoPNM0BKklbYa81w=}
排查过程
- 一开始以为是curl的参数编码问题,试了
--data-url-encode参数,没用。 - 因为用的是AD认证,不同用户发起构建且密码每40天强制更换,没法用Jenkins凭证插件存凭证,必须每次手动传参数。
解决方案
问题根本不在curl请求,而是Jenkins2的Ansible额外变量配置错误:
之前配置额外变量时,值字段留空了,Jenkins自动生成了随机字符串当默认值。把额外变量的键值对改成下面这样就解决了:
- 键:
user,值:$USER - 键:
pass,值:$PASS - 键:
revision,值:$REVISION
修改后参数能正常传递,构建日志显示的就是实际输入的参数值了。
内容的提问来源于stack exchange,提问作者loonar
相关产品推荐
相关产品推荐

