How To Fetch The Current Branch From Jenkins?
I would like to query Jenkins using it's API and Python to fetch the branch that is currently ready to be built. How can I do that?
Solution 1:
From the jenkins API you can check
lastSuccessfulBuild/api/json?tree=actions[buildsByBranchName]
Maybe what you can do is build your stuff, and have a second job triggered after your build job is finished.
Then in this new job, you can find the branch name
I dont use python, but with jq you can get the branch names in an array like this:
jq -r '.actions[].buildsByBranchName | select(. != null)'
The full code (you can of course replace the bash vars correctly):
JENKINS_API_URL=$JENKINS_SERVER/job/$DEPLOY_JOB/lastSuccessfulBuild/api/json?tree=actions[buildsByBranchName]
BRANCHES_JSON=$(curl --globoff --insecure --silent $JENKINS_API_URL)
BRANCHES=`echo $BRANCHES_JSON | /var/lib/jenkins/tools/jq/jq -r '.actions[].buildsByBranchName | select(. != null)'`
Solution 2:
I finally did this.
# the url of jenkins config.xml jenkins_url = 'http://11.11.111.11:8686/job/TheJob/config.xml' j_user = "someone" j_pass = "somepass" def get_jenkins_branch_name(jenkins_url, j_user, j_pass): """ The function goes to the provided jenkins XML url, authenticates with an authenticated user, grabs the xml, turns it to dictionary, searches inside the dictionary for the branch name """ import requests,xmltodict from requests.auth import HTTPBasicAuth # get the url with an authenticated user response = requests.get(jenkins_url, auth=HTTPBasicAuth(j_user, j_pass)) #the response must be 200 # the content of the response is the xml xml = response.content # parse the xml to a dictionary jenkins_dict = xmltodict.parse(xml) # grab the actual branch name branch_name = jenkins_dict['project']['scm']['branches']['hudson.plugins.git.BranchSpec']['name'] return branch_name
Post a Comment for "How To Fetch The Current Branch From Jenkins?"