StackRice
StackRice

Reputation: 51

Jenkins API request using Curl

I am trying to make a request to the Jenkins API. However, I always get a 401 unauthorized error. I have tried all permutations of requests using Curl - including sending the API token and Crumb. The Jenkins is hosted on a DEV server and not on my local. I have CSRF protection enabled on Jenkins. Could this be a CORS issue or something else?

Upvotes: 3

Views: 13696

Answers (2)

Jim
Jim

Reputation: 86

Trigger Jenkins build with parameters using API token

Variables
UserName is the user with permission to execute jobs
UserTokenValue is the token key assigned to UserName.
JobTokenValue is the token key assigned to the job to allow remote execution.

  1. Create User Token - if jenkins instance requires authorization to execute jobs then user token will be required or the error "missing bread crumb trail" may appear.
    Login to Jenkins
    Click username in top right corner
    Click configure
    Click add token
    Capture the UserTokenValue. Note:Token id will not be needed going forward.

Optional - verify token assigned to user.
Command curl -v -u <user>:<userTokenValue> <jenkins>/user/<user>/api/json
Example curl -v -u john:11bc70579c86512be9a4356127640abfda http://jenkins.dv.local:8080/user/john/api/json

  1. Enable Jenkins Job to "Trigger builds remotely (e.g., from scripts)"
    Locate Jenkins job and click Configure
    Scroll to the "Build Triggers" section and enable the checkbox "Trigger builds remotely"
    Enter a secret "Authentication Token" in the text box. The Token is required to execute this specific job remotely. Use "SuperSecret"
    Because the Token is set in this one job configuration, that value will only allow this one job to execute remotely.
    Use the same value for all jobs if you like but there is no way to manage the JobTokenValue Globally that I know of.

  2. Execute job with parameters using Curl POST
    Your values will vary...
    JenkinsUrl : https://jenkins.dv.local:8080
    UserName : john
    UserTokenValue : 115e46b2109bda095cc070b6347dafe585
    JobTokenValue : SuperSecret

Command

curl -X POST <JenkinsUrl>/job/test/build -user <UserName>:<UserTokenValue> --data token=<JobTokenValue> --data parm1Name=parm1Value --data parm2Name="Parm2Value with spaces"

Example

curl -X POST http://jenkins.dv.local:8080/job/MyRemoteJob/buildWithParameters --user john:115e46b2109bda095cc070b6347dafe585 --data token=SuperSecret --data TEST_PLAN_KEY=QTAK-1040 --data BROWSER="Chrome (headless)"

Upvotes: 5

sney-js
sney-js

Reputation: 1097

401 probably means your username/pass are incorrect.

This works for me: curl -v -X GET "http://$JENKINS_URL/crumbIssuer/api/json" --user $USERNAME:$USERPASS

If there is a CORS issue, use https://plugins.jenkins.io/cors-filter/.

Upvotes: 0

Related Questions