Version 2.1 of Jenkins Jobs Builder
* Adds delete support * Adds check-* job support Change-Id: Ia7a19cebd32cb348e26b086353a8b5225e1e5837
This commit is contained in:
parent
f212c0895d
commit
5599a3daa8
@ -153,21 +153,35 @@ class Jenkins(object):
|
|||||||
xml = self.jenkins.get_job_config(job_name)
|
xml = self.jenkins.get_job_config(job_name)
|
||||||
return hashlib.md5(xml).hexdigest()
|
return hashlib.md5(xml).hexdigest()
|
||||||
|
|
||||||
|
def delete_job(self, job_name):
|
||||||
|
if self.jenkins.is_job(job_name):
|
||||||
|
self.jenkins.delete_job(job_name)
|
||||||
|
|
||||||
yparse = YamlParser(options.file)
|
def delete_job():
|
||||||
cache = CacheStorage()
|
remote_jenkins = Jenkins(config.get('jenkins','url'), config.get('jenkins','user'), config.get('jenkins','password'))
|
||||||
remote_jenkins = Jenkins(config.get('jenkins','url'), config.get('jenkins','user'), config.get('jenkins','password'))
|
remote_jenkins.delete_job(options.name)
|
||||||
while True:
|
|
||||||
try:
|
def update_job():
|
||||||
xml = yparse.get_next_xml()
|
yparse = YamlParser(options.file)
|
||||||
job = yparse.get_name()
|
cache = CacheStorage()
|
||||||
md5 = xml.md5()
|
remote_jenkins = Jenkins(config.get('jenkins','url'), config.get('jenkins','user'), config.get('jenkins','password'))
|
||||||
if remote_jenkins.is_job(job) and not cache.is_cached(job):
|
while True:
|
||||||
old_md5 = remote_jenkins.get_job_md5(job)
|
try:
|
||||||
cache.set(job, old_md5)
|
xml = yparse.get_next_xml()
|
||||||
|
job = yparse.get_name()
|
||||||
|
md5 = xml.md5()
|
||||||
|
if remote_jenkins.is_job(job) and not cache.is_cached(job):
|
||||||
|
old_md5 = remote_jenkins.get_job_md5(job)
|
||||||
|
cache.set(job, old_md5)
|
||||||
|
|
||||||
|
if cache.has_changed(job, md5):
|
||||||
|
remote_jenkins.update_job(job, xml.output())
|
||||||
|
cache.set(job, md5)
|
||||||
|
except StopIteration:
|
||||||
|
break
|
||||||
|
|
||||||
|
if options.command == 'delete':
|
||||||
|
delete_job()
|
||||||
|
elif options.command == 'update':
|
||||||
|
update_job()
|
||||||
|
|
||||||
if cache.has_changed(job, md5):
|
|
||||||
remote_jenkins.update_job(job, xml.output())
|
|
||||||
cache.set(job, md5)
|
|
||||||
except StopIteration:
|
|
||||||
break
|
|
||||||
|
@ -42,13 +42,17 @@ class JenkinsTalker(object):
|
|||||||
raise JenkinsTalkerException('error posting XML')
|
raise JenkinsTalkerException('error posting XML')
|
||||||
curl.close()
|
curl.close()
|
||||||
|
|
||||||
def _get_request(self, path, pass_codes):
|
def _get_request(self, path, pass_codes, post=False):
|
||||||
curl = pycurl.Curl()
|
curl = pycurl.Curl()
|
||||||
response = StringIO()
|
response = StringIO()
|
||||||
curl.setopt(pycurl.URL, self.url + path)
|
curl.setopt(pycurl.URL, self.url + path)
|
||||||
|
if post == True:
|
||||||
|
curl.setopt(pycurl.POST, 1)
|
||||||
|
curl.setopt(pycurl.POSTFIELDSIZE, 0)
|
||||||
curl.setopt(pycurl.USERPWD, self.user + ":" + self.password)
|
curl.setopt(pycurl.USERPWD, self.user + ":" + self.password)
|
||||||
curl.setopt(pycurl.WRITEFUNCTION, response.write)
|
curl.setopt(pycurl.WRITEFUNCTION, response.write)
|
||||||
curl.perform()
|
curl.perform()
|
||||||
|
print response.getvalue()
|
||||||
if curl.getinfo(pycurl.RESPONSE_CODE) not in pass_codes:
|
if curl.getinfo(pycurl.RESPONSE_CODE) not in pass_codes:
|
||||||
raise JenkinsTalkerException('error getting response')
|
raise JenkinsTalkerException('error getting response')
|
||||||
curl.close()
|
curl.close()
|
||||||
@ -67,7 +71,7 @@ class JenkinsTalker(object):
|
|||||||
def delete_job(self, job_name):
|
def delete_job(self, job_name):
|
||||||
path = 'job/' + job_name + '/doDelete'
|
path = 'job/' + job_name + '/doDelete'
|
||||||
pass_codes = [ 302 ]
|
pass_codes = [ 302 ]
|
||||||
self._get_request(path, pass_codes)
|
self._get_request(path, pass_codes, True)
|
||||||
|
|
||||||
def get_job_config(self, job_name):
|
def get_job_config(self, job_name):
|
||||||
path = 'job/' + job_name + '/config.xml'
|
path = 'job/' + job_name + '/config.xml'
|
||||||
|
@ -33,6 +33,8 @@
|
|||||||
# branchCompareType: 'ANT'
|
# branchCompareType: 'ANT'
|
||||||
# branchPattern: '**'
|
# branchPattern: '**'
|
||||||
# ...
|
# ...
|
||||||
|
#
|
||||||
|
# triggerApprovalCategory and triggerApprovalValue only required if triggerOnCommentAddedEvent: 'true'
|
||||||
|
|
||||||
import xml.etree.ElementTree as XML
|
import xml.etree.ElementTree as XML
|
||||||
|
|
||||||
@ -61,8 +63,9 @@ class trigger_gerrit(object):
|
|||||||
XML.SubElement(gtrig, 'triggerOnChangeMergedEvent').text = trigger_data['triggerOnChangeMergedEvent']
|
XML.SubElement(gtrig, 'triggerOnChangeMergedEvent').text = trigger_data['triggerOnChangeMergedEvent']
|
||||||
XML.SubElement(gtrig, 'triggerOnCommentAddedEvent').text = trigger_data['triggerOnCommentAddedEvent']
|
XML.SubElement(gtrig, 'triggerOnCommentAddedEvent').text = trigger_data['triggerOnCommentAddedEvent']
|
||||||
XML.SubElement(gtrig, 'triggerOnRefUpdatedEvent').text = trigger_data['triggerOnRefUpdatedEvent']
|
XML.SubElement(gtrig, 'triggerOnRefUpdatedEvent').text = trigger_data['triggerOnRefUpdatedEvent']
|
||||||
XML.SubElement(gtrig, 'commentAddedTriggerApprovalCategory').text = trigger_data['triggerApprovalCategory']
|
if trigger_data['triggerOnCommentAddedEvent'] == 'true':
|
||||||
XML.SubElement(gtrig, 'commentAddedTriggerApprovalValue').text = str(trigger_data['triggerApprovalValue'])
|
XML.SubElement(gtrig, 'commentAddedTriggerApprovalCategory').text = trigger_data['triggerApprovalCategory']
|
||||||
|
XML.SubElement(gtrig, 'commentAddedTriggerApprovalValue').text = str(trigger_data['triggerApprovalValue'])
|
||||||
XML.SubElement(gtrig, 'buildStartMessage')
|
XML.SubElement(gtrig, 'buildStartMessage')
|
||||||
XML.SubElement(gtrig, 'buildFailureMessage').text = trigger_data['failureMessage']
|
XML.SubElement(gtrig, 'buildFailureMessage').text = trigger_data['failureMessage']
|
||||||
XML.SubElement(gtrig, 'buildSuccessfulMessage')
|
XML.SubElement(gtrig, 'buildSuccessfulMessage')
|
||||||
|
@ -327,3 +327,163 @@ scm:
|
|||||||
|
|
||||||
assignednode:
|
assignednode:
|
||||||
node: 'oneiric'
|
node: 'oneiric'
|
||||||
|
|
||||||
|
---
|
||||||
|
# pep8-check
|
||||||
|
modules:
|
||||||
|
- properties
|
||||||
|
- scm
|
||||||
|
- assignednode
|
||||||
|
- trigger_gerrit
|
||||||
|
- builders
|
||||||
|
- publisher_pep8
|
||||||
|
|
||||||
|
main:
|
||||||
|
name: 'check-reddwarf-pep8'
|
||||||
|
site: 'stackforge'
|
||||||
|
project: 'reddwarf'
|
||||||
|
authenticatedBuild: 'true'
|
||||||
|
disabled: 'true'
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
triggerOnPatchsetUploadedEvent: 'true'
|
||||||
|
triggerOnChangeMergedEvent: 'false'
|
||||||
|
triggerOnCommentAddedEvent: 'false'
|
||||||
|
triggerOnRefUpdatedEvent: 'false'
|
||||||
|
failureMessage: ''
|
||||||
|
projects:
|
||||||
|
- projectCompareType: 'PLAIN'
|
||||||
|
projectPattern: 'stackforge/reddwarf'
|
||||||
|
branchCompareType: 'ANT'
|
||||||
|
branchPattern: '**'
|
||||||
|
|
||||||
|
builders:
|
||||||
|
- gerrit_git_prep
|
||||||
|
- copy_bundle
|
||||||
|
- pep8
|
||||||
|
|
||||||
|
scm:
|
||||||
|
scm: 'false'
|
||||||
|
|
||||||
|
assignednode:
|
||||||
|
node: 'oneiric'
|
||||||
|
|
||||||
|
---
|
||||||
|
# python26-check
|
||||||
|
modules:
|
||||||
|
- properties
|
||||||
|
- scm
|
||||||
|
- assignednode
|
||||||
|
- trigger_gerrit
|
||||||
|
- builders
|
||||||
|
- publisher_none
|
||||||
|
|
||||||
|
main:
|
||||||
|
name: 'check-reddwarf-python26'
|
||||||
|
site: 'stackforge'
|
||||||
|
project: 'reddwarf'
|
||||||
|
authenticatedBuild: 'true'
|
||||||
|
disabled: 'true'
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
triggerOnPatchsetUploadedEvent: 'true'
|
||||||
|
triggerOnChangeMergedEvent: 'false'
|
||||||
|
triggerOnCommentAddedEvent: 'true'
|
||||||
|
triggerOnRefUpdatedEvent: 'false'
|
||||||
|
failureMessage: ''
|
||||||
|
projects:
|
||||||
|
- projectCompareType: 'PLAIN'
|
||||||
|
projectPattern: 'stackforge/reddwarf'
|
||||||
|
branchCompareType: 'ANT'
|
||||||
|
branchPattern: '**'
|
||||||
|
|
||||||
|
builders:
|
||||||
|
- gerrit_git_prep
|
||||||
|
- copy_bundle
|
||||||
|
- python26
|
||||||
|
|
||||||
|
scm:
|
||||||
|
scm: 'true'
|
||||||
|
|
||||||
|
assignednode:
|
||||||
|
node: 'oneiric'
|
||||||
|
|
||||||
|
---
|
||||||
|
# python27-check
|
||||||
|
modules:
|
||||||
|
- properties
|
||||||
|
- scm
|
||||||
|
- assignednode
|
||||||
|
- trigger_gerrit
|
||||||
|
- builders
|
||||||
|
- publisher_none
|
||||||
|
|
||||||
|
main:
|
||||||
|
name: 'check-reddwarf-python27'
|
||||||
|
site: 'stackforge'
|
||||||
|
project: 'reddwarf'
|
||||||
|
authenticatedBuild: 'true'
|
||||||
|
disabled: 'true'
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
triggerOnPatchsetUploadedEvent: 'true'
|
||||||
|
triggerOnChangeMergedEvent: 'false'
|
||||||
|
triggerOnCommentAddedEvent: 'false'
|
||||||
|
triggerOnRefUpdatedEvent: 'false'
|
||||||
|
failureMessage: ''
|
||||||
|
projects:
|
||||||
|
- projectCompareType: 'PLAIN'
|
||||||
|
projectPattern: 'stackforge/reddwarf'
|
||||||
|
branchCompareType: 'ANT'
|
||||||
|
branchPattern: '**'
|
||||||
|
|
||||||
|
builders:
|
||||||
|
- gerrit_git_prep
|
||||||
|
- copy_bundle
|
||||||
|
- python27
|
||||||
|
|
||||||
|
scm:
|
||||||
|
scm: 'true'
|
||||||
|
|
||||||
|
assignednode:
|
||||||
|
node: 'oneiric'
|
||||||
|
|
||||||
|
---
|
||||||
|
# merge-check
|
||||||
|
modules:
|
||||||
|
- properties
|
||||||
|
- scm
|
||||||
|
- assignednode
|
||||||
|
- trigger_gerrit
|
||||||
|
- builders
|
||||||
|
- publisher_none
|
||||||
|
|
||||||
|
main:
|
||||||
|
name: 'check-reddwarf-merge'
|
||||||
|
site: 'stackforge'
|
||||||
|
project: 'reddwarf'
|
||||||
|
authenticatedBuild: 'true'
|
||||||
|
disabled: 'true'
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
triggerOnPatchsetUploadedEvent: 'true'
|
||||||
|
triggerOnChangeMergedEvent: 'false'
|
||||||
|
triggerOnCommentAddedEvent: 'false'
|
||||||
|
triggerOnRefUpdatedEvent: 'false'
|
||||||
|
failureMessage: 'This change was unable to be automatically merged with the current state of the repository. Please rebase your change and upload a new patchset.'
|
||||||
|
projects:
|
||||||
|
- projectCompareType: 'PLAIN'
|
||||||
|
projectPattern: 'stackforge/reddwarf'
|
||||||
|
branchCompareType: 'ANT'
|
||||||
|
branchPattern: '**'
|
||||||
|
|
||||||
|
builders:
|
||||||
|
- gerrit_git_prep
|
||||||
|
|
||||||
|
scm:
|
||||||
|
scm: 'false'
|
||||||
|
|
||||||
|
assignednode:
|
||||||
|
node: 'oneiric'
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user