jenkins rest api 返回 400 没有提交任何内容

BiA*_*AiB 6 jenkins

我尝试使用 cURL 通过其 API 启动 Jenkins 构建:

#!/usr/bin/env bash
curl \
    -i \
    --fail \
    --show-error \
    -s \
    -X POST \
    -H 'Content-Type:application/json' \
    -H 'Accept:application/json' \
    --form json='{"parameter": [{"name":"COMPOSE_FULL_NAME", "value": "/redacted/docker-compose-prod.yml"}, {"name":"BRANCH", "value": "prod"}, {"name":"AD_USER", "value": "redacted"}, {"name":"AD_PASSWORD", "value": "redacted"}}]}' \
    -u redactedUser:redactedToken \
    -k \
    https://jenkins-dck.redacted/job/elr-156344/job/stack_deploy/build \
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

curl: (22) The requested URL returned error: 400 Nothing is submitted
Run Code Online (Sandbox Code Playgroud)

我尝试了几种传递 POST 数据的方法,比如使用-dor--data-urlencode 'json={但到目前为止没有成功。

知道发生了什么吗?该消息并没有说太多,我无法访问 jenkins 后端的日志。

BiA*_*AiB 5

ok, found it, you first need to disregard the docs here: https://wiki.jenkins.io/display/JENKINS/Remote+access+API. The proper method is described at https://wiki.jenkins.io/display/JENKINS/Parameterized+Build

use this API endpoint:

https://jenkins-dck.redacted/job/elr-156344/job/stack_deploy/buildWithParameters?param1=urlencode&param2=urlencoded

Don't forget to quote the url in the CURL quote, since bash will mess with & symbols.

working example:

#!/usr/bin/env bash
curl \
    -i \
    --fail \
    --show-error \
    -s \
    -X POST \
    -H 'Content-Type:application/json' \
    -H 'Accept:application/json' \
    -u redactedUser:redactedToken \
    -k \
    "https://jenkins-dck.redacted/job/elr-156344/job/stack_deploy/buildWithParameters?BRANCH=prod&AD_USER=$SERVICE_ACCOUNT"
Run Code Online (Sandbox Code Playgroud)