我有 2 个 Jenkins 实例。在 Jenkins1 上的构建完成后,我希望它触发 Jenkins2 上的另一个构建。我的构建调用一个 ansible 剧本,该剧本执行 SVN 更新并进行参数化 - 用户必须编写其 SVN 凭据和 SVN 修订版才能执行构建。必须在 Jenkins2 上触发相同的构建。
我的参数如下:
String Parameter - USER
Password Parameter - PASS
String Parameter - REVISION
我在 Jenkins1 上配置了以下构建后脚本,它成功触发了 Jenkins2 上的构建:
curl POST http://JENKINS2:8080/job/test/buildWithParameters \
--user user:token \
--data "REVISION=$REVISION" \
--data "USER=$USER" \
--data "PASS=$PASS"
问题是参数没有正确地从Jenkins1传递到Jenkins2。这是 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=}
在我看来,参数是经过编码的。我也尝试使用 --data-url-encode 但无济于事。
我必须指出,不可能通过凭据插件使用存储的凭据,因为我们使用 AD 身份验证,不同的用户将开始构建,并且组织中的密码必须每 40 天更改一次。每次只传递凭据会更容易。
您应该使用以下
curl
命令:
curl -X POST http://JENKINS2:8080/job/test/buildWithParameters \
--user user:token \
--form "REVISION=$REVISION" \
--form "USER=$USER" \
--form "PASS=$PASS"