一尘不染

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

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/'

我发布的URL与构建日志中链接的URL相同(控制台输出)。


阅读 265

收藏
2020-07-25

共1个答案

一尘不染

有一种更简单的方法,只需调用proceedEmpty作业的URL:

curl -X POST -H "Jenkins-Crumb:${JENKINS_CRUMB}" http://${JENKINS_URL}/job/${JOB_NAME}/${BUILD_ID}/input/${INPUT_ID}/proceedEmpty

无需传递身体数据。

要中止,请使用:

curl -X POST -H "Jenkins-Crumb:${JENKINS_CRUMB}" http://${JENKINS_URL}/job/${JOB_NAME}/${BUILD_ID}/input/${INPUT_ID}/abort
2020-07-25