Jenkins Pipeline: input step filled via remote script/curl

3,480 views
Skip to first unread message

Miłosz Tyborowski

unread,
Aug 18, 2016, 8:44:42 AM8/18/16
to Jenkins Users
Hello everyone.

Recently I have been testing Jenkins Pipeline. So far it seems like a wonderful idea, however as beautiful as it looks I run into a problem, a deal-breaker for me as it turns out. 

I have Jenkins pipeline with an Input step, and I would like to submit this input(single string argument) via a script. 

So far I am trying with curl, ideally I'll be sending it via Python requests library. This should be an easy POST request, however with CSRF it becomes tricky. I've obtained Jenkins-Crumb (using curl in this case, from the same machine and same bash session), but still can't send the content...

I'm sending
Jenkins-Crumb:XXX header

just like it is explained at https://wiki.jenkins-ci.org/display/JENKINS/Remote+access+API

my request looks like this:

curl -vvv -X POST -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/'



I have also tried using
--form json='{"parameter":{"name":"result_payload","value":"asd"},"Jenkins-Crumb":"${JENKINS_CRUMB}"}'


None of which succeeded.

The URL I'm POSTing at is the same, as the one linked in build log (Console output):
http://${JENKINS_URL}/job/${JOB_NAME}/${BUILD_NR}/input/


What am I missing to successfully fill in the "Input" step of Jenkins Pipeline?

Any help will be highly appreciated!

Best regards,
Miłosz Tyborowski.

Miłosz Tyborowski

unread,
Aug 23, 2016, 7:41:39 AM8/23/16
to Jenkins Users
Hello.

I managed to resolve this issue.

Hoping that someone else will benefit from my answer, let me explain how I achieved OPs target.

All that Jenkis Pipeline input step needs is a properly formatted JSON and OK button caption sent to the right URL.

So, the proper syntax is:

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'

Best regards,
Miłosz Tyborowski
Reply all
Reply to author
Forward
0 new messages