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?"