Jenkins输入管道步骤通过POST填充CSRF - howto?

J. *_*Doe 6 post curl pipeline jenkins

我有一个带输入步骤的Jenkins管道,我想通过脚本提交这个输入(单字符串参数).到目前为止,我正在尝试使用curl,理想情况下我将通过Python请求库发送它.这应该是一个简单的POST请求,但是使用CSRF会变得棘手.我已经获得了Jenkins-Crumb(在这种情况下使用curl,来自同一台机器和相同的bash会话),但仍然无法发送内容......

我正在发送Jenkins-Crumb:XXX标题,就像在https://wiki.jenkins-ci.org/display/JENKINS/Remote+access+API上解释的那样

我的请求看起来像这样:

curl -vvv -X POST --user '${USER}:${API_KEY}' -H "Jenkins-Crumb:${JENKINS_CRUMB}" -d 'json="{"parameter":{"name":"${PARAM_NAME}","value":"asd"},"Jenkins-Crumb":"${JENKINS_CRUMB}"}"' 'http://${JENKINS_URL}/job/${JOB_NAME}/${BUILD_NR}/input/'
Run Code Online (Sandbox Code Playgroud)

我正在POST的URL与构建日志中链接的URL(控制台输出)相同.

J. *_*Doe 5

我设法解决了这个问题。

希望其他人将从我的回答中受益,让我解释一下我如何实现OP的目标。

Jenkis Pipeline输入步骤所需要做的就是将正确格式的JSON和OK按钮标题发送到正确的URL。

因此,正确的语法是:

curl -X POST -H "Jenkins-Crumb:${JENKINS_CRUMB}" -d json='{"parameter": {"name": "${PARAMETER_NAME}", "value": "${PARAMETER_VALUE}"}}' -d proceed='${SUBMIT_CAPTION}' 'http://j${JENKINS_URL}/job/${JOB_NAME}/${BUILD_ID}/input/${INPUT_ID}/submit'
Run Code Online (Sandbox Code Playgroud)

问候

  • 什么是提交标题? (2认同)

and*_*osr 4

有一个更简单的方法,只需调用proceedEmpty职位的 URL:

curl -X POST -H "Jenkins-Crumb:${JENKINS_CRUMB}" http://${JENKINS_URL}/job/${JOB_NAME}/${BUILD_ID}/input/${INPUT_ID}/proceedEmpty
Run Code Online (Sandbox Code Playgroud)

不需要传入body数据。

要中止,请使用:

curl -X POST -H "Jenkins-Crumb:${JENKINS_CRUMB}" http://${JENKINS_URL}/job/${JOB_NAME}/${BUILD_ID}/input/${INPUT_ID}/abort
Run Code Online (Sandbox Code Playgroud)