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)
|
||||
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)
|
||||
cache = CacheStorage()
|
||||
remote_jenkins = Jenkins(config.get('jenkins','url'), config.get('jenkins','user'), config.get('jenkins','password'))
|
||||
while True:
|
||||
try:
|
||||
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)
|
||||
def delete_job():
|
||||
remote_jenkins = Jenkins(config.get('jenkins','url'), config.get('jenkins','user'), config.get('jenkins','password'))
|
||||
remote_jenkins.delete_job(options.name)
|
||||
|
||||
def update_job():
|
||||
yparse = YamlParser(options.file)
|
||||
cache = CacheStorage()
|
||||
remote_jenkins = Jenkins(config.get('jenkins','url'), config.get('jenkins','user'), config.get('jenkins','password'))
|
||||
while True:
|
||||
try:
|
||||
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')
|
||||
curl.close()
|
||||
|
||||
def _get_request(self, path, pass_codes):
|
||||
def _get_request(self, path, pass_codes, post=False):
|
||||
curl = pycurl.Curl()
|
||||
response = StringIO()
|
||||
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.WRITEFUNCTION, response.write)
|
||||
curl.perform()
|
||||
print response.getvalue()
|
||||
if curl.getinfo(pycurl.RESPONSE_CODE) not in pass_codes:
|
||||
raise JenkinsTalkerException('error getting response')
|
||||
curl.close()
|
||||
@ -67,7 +71,7 @@ class JenkinsTalker(object):
|
||||
def delete_job(self, job_name):
|
||||
path = 'job/' + job_name + '/doDelete'
|
||||
pass_codes = [ 302 ]
|
||||
self._get_request(path, pass_codes)
|
||||
self._get_request(path, pass_codes, True)
|
||||
|
||||
def get_job_config(self, job_name):
|
||||
path = 'job/' + job_name + '/config.xml'
|
||||
|
@ -33,6 +33,8 @@
|
||||
# branchCompareType: 'ANT'
|
||||
# branchPattern: '**'
|
||||
# ...
|
||||
#
|
||||
# triggerApprovalCategory and triggerApprovalValue only required if triggerOnCommentAddedEvent: 'true'
|
||||
|
||||
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, 'triggerOnCommentAddedEvent').text = trigger_data['triggerOnCommentAddedEvent']
|
||||
XML.SubElement(gtrig, 'triggerOnRefUpdatedEvent').text = trigger_data['triggerOnRefUpdatedEvent']
|
||||
XML.SubElement(gtrig, 'commentAddedTriggerApprovalCategory').text = trigger_data['triggerApprovalCategory']
|
||||
XML.SubElement(gtrig, 'commentAddedTriggerApprovalValue').text = str(trigger_data['triggerApprovalValue'])
|
||||
if trigger_data['triggerOnCommentAddedEvent'] == 'true':
|
||||
XML.SubElement(gtrig, 'commentAddedTriggerApprovalCategory').text = trigger_data['triggerApprovalCategory']
|
||||
XML.SubElement(gtrig, 'commentAddedTriggerApprovalValue').text = str(trigger_data['triggerApprovalValue'])
|
||||
XML.SubElement(gtrig, 'buildStartMessage')
|
||||
XML.SubElement(gtrig, 'buildFailureMessage').text = trigger_data['failureMessage']
|
||||
XML.SubElement(gtrig, 'buildSuccessfulMessage')
|
||||
|
@ -327,3 +327,163 @@ scm:
|
||||
|
||||
assignednode:
|
||||
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