通过curl请求在远程服务器上触发Jenkins参数化构建执行并向其传递凭据

问题描述 投票:0回答:1

我有 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 天更改一次。每次只传递凭据会更容易。

jenkins ansible
1个回答
0
投票

您应该使用以下

curl
命令:

curl -X POST http://JENKINS2:8080/job/test/buildWithParameters \
  --user user:token \
  --form "REVISION=$REVISION" \
  --form "USER=$USER" \
  --form "PASS=$PASS"
© www.soinside.com 2019 - 2024. All rights reserved.