Source code for naginator_publisher

# -*- coding: utf-8 -*-

from jenkins_jobs.errors import JenkinsJobsException
import xml.etree.ElementTree as XML


[docs]def naginator(parser, xml_parent, data): """yaml: naginator Automatically reschedule a build after a build failure. Requires the Jenkins `Naginator Plugin <https://wiki.jenkins-ci.org/display/JENKINS/Naginator+Plugin>`_ :arg int max-retries: Limits successive failed build retries. Set to 0 for no limit. Default is 0. :arg bool rerun-if-unstable: Rerun build for unstable builds as well as failures. Default is false. :arg dict delay: :delay: Must specify either fixed or progressive. Default is fixed with delay of 0. * **fixed** (`dict`) :fixed: * **delay** (`int`) seconds to wait before retry. Default is 0. * **progressive** (`dict`) :progressive: Progressively delay before retrying build. The delay starts at *increment* seconds and grows by ``increment * number of consecutive failures`` up to the maximum value, then remains at *maximum*. e.g. (5, 10, 20, 35, 55, ..., maximum) seconds. * **increment** (`int`) - default is 0 * **maximum** (`int`) - default is 0 :arg bool check-regexp: Only rerun build if regular expression is found in output. Default is false. :arg str regexp-for-rerun: Regular expression to search for. Example: .. literalinclude:: /../test/fixtures/naginator_fixed.yaml """ root = XML.SubElement( xml_parent, 'com.chikli.hudson.plugin.naginator.NaginatorPublisher' ) XML.SubElement(root, 'maxSchedule').text = str(data.get('max-retries', 0)) rerun_if_unstable = data.get('rerun-if-unstable', False) XML.SubElement(root, 'rerunIfUnstable').text = str( rerun_if_unstable).lower() delay = data.get('delay', {}) fixed = delay.get('fixed') progressive = delay.get('progressive') if fixed is not None and progressive is not None: raise JenkinsJobsException( 'Must specify one of fixed or progressive, not both.') elif fixed is None and progressive is None: # If no delay dict set, default to fixed with interval 0. fixed = {'delay': 0} delay_root = XML.SubElement(root, 'delay') if fixed is not None: delay_root.set('class', 'com.chikli.hudson.plugin.naginator.FixedDelay') XML.SubElement(delay_root, 'delay').text = str(fixed.get('delay', 0)) elif progressive is not None: delay_root.set( 'class', 'com.chikli.hudson.plugin.naginator.ProgressiveDelay') prg_increment = progressive.get('increment', 0) XML.SubElement(delay_root, 'increment').text = str(prg_increment) prg_maximum = progressive.get('maximum', 0) XML.SubElement(delay_root, 'max').text = str(prg_maximum) check_regexp = data.get('check-regexp', False) XML.SubElement(root, 'checkRegexp').text = str(check_regexp).lower() if 'regexp-for-rerun' not in data: XML.SubElement(root, 'regexpForRerun') else: XML.SubElement(root, 'regexpForRerun').text = data['regexp-for-rerun']