Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import base64
- import requests
- INFO = 'api/json'
- JOB_INFO = 'job/%s/api/json?depth=0'
- JOB_NAME = 'job/%s/api/json?tree=name'
- JOB_CONFIG = 'job/%s/config.xml'
- CREATE_JOB = 'createItem?name=%s'
- ENABLE_JOB = 'job/%s/enable'
- DISABLE_JOB = 'job/%s/disable'
- class JenkinsException(Exception):
- pass
- class Jenkins(object):
- def __init__(self, url, username=None, password=None):
- if url[-1] == '/':
- self.server = url
- else:
- self.server = url + '/'
- if username is not None and password is not None:
- self.auth = 'Basic ' + \
- base64.encodestring('%s:%s' % (username, password))[:-1]
- else:
- self.auth = None
- def create_job(self, name, config_xml):
- if self.job_exists(name):
- raise JenkinsException('%s already exists' % (name))
- headers = {'Content-Type': 'text/xml'}
- self.send_request(CREATE_JOB % name, method='POST',
- data=config_xml, headers=headers)
- if not self.job_exists(name):
- raise JenkinsException('Create %s failed' % name)
- else:
- return self.get_job_info(name)
- def get_job_info(self, name):
- try:
- resp = self.send_request(JOB_INFO % name)
- if resp:
- return resp.json()
- else:
- raise JenkinsException('%s does not exist' % name)
- except requests.exceptions, e:
- raise JenkinsException('Error while talking to Jenkins: %s' % e)
- def get_job_name(self, name):
- resp = self.send_request(JOB_NAME % name)
- if resp:
- resp_json = resp.json()
- if resp_json['name'] != name:
- raise JenkinsException(
- 'Jenkins returned different job name')
- return resp_json['name']
- else:
- return None
- def get_info(self):
- try:
- return (self.send_request(INFO)).json
- except requests.exceptions, e:
- raise JenkinsException('Error while talking to Jenkins: %s' % e)
- def get_jobs(self):
- return self.get_info()['jobs']
- def enable_job(self, name):
- self.get_job_info(name)
- self.send_request(ENABLE_JOB % name)
- def disable_job(self, name):
- self.get_job_info(name)
- self.send_request(DISABLE_JOB % name)
- def job_exists(self, name):
- if self.get_job_name(name) == name:
- return True
- else:
- return False
- def get_job_config(self, name):
- resp = self.send_request(JOB_CONFIG % name)
- xml = resp.text
- return xml
- def send_request(self, url, method='GET', data=None, headers=None):
- try:
- url = self.server + url
- resp = None
- if not headers:
- headers = {}
- if self.auth:
- headers['Authorization'] = self.auth
- if (method == 'GET'):
- resp = requests.get(url, params=data, headers=headers)
- elif(method == 'POST'):
- resp = requests.post(url, data=data, headers=headers)
- return resp
- except requests.exceptions, e:
- raise JenkinsException('Error while talking to Jenkins: %s' % e)
Add Comment
Please, Sign In to add comment