def root_to_yaml(root, name): # Top-level "job" data job = {} build = [{'job': job}] job['name'] = unicode(name) # Create register reg = Registry() # "project-type:" YAML project_types = reg.get_project_types() if root.tag in project_types: job['project-type'] = project_types[root.tag] # Handle each top-level XML element with custom modules/functions in # modules/handlers.py # registry determines difference at runtime reg = Registry() handlers = Handlers(reg) handlers.gen_yml(job, root) else: # Project type not currently supported, so output as raw XML if 'maven' in root.tag: job['project-type'] = 'maven' raw = {} raw['xml'] = ET.tostring(root) job['xml'] = {'raw': raw} return yaml.dump(build, default_flow_style=False, default_style=None)
def definition(top, parent): reg = Registry() handlers = Handlers(reg) # Create register reg = Registry() # sub-level "definition" data definition = {} if 'class' in top.attrib: # Pipeline script if top.attrib[ 'class'] == 'org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition': # Using pipeline-scm (getting jenkinsfile from repo) parent.append(['pipeline-scm', definition]) elif top.attrib[ 'class'] == 'org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition': # Using DSL (passing raw pipeline script) for child in top.getchildren(): if child.tag == 'script': parent.append(['dsl', child.text]) elif child.tag == 'sandbox': parent.append(['sandbox', get_bool(child.text)]) # Don't pass anything to handlers.gen_yml, handled it here top = '' else: parent.append(['definition', definition]) reg = Registry() handlers = Handlers(reg) handlers.gen_yml(definition, top)
def definition(top, parent): reg = Registry() handlers = Handlers(reg) # Create register reg = Registry() # sub-level "definition" data definition = {} parent.append(['definition', definition]) reg = Registry() handlers = Handlers(reg) handlers.gen_yml(definition, top)
def root_to_yaml(root, name, ignore_actions=False): # Top-level "job" data job = {} job['name'] = text_type(name) build = [] # Create register reg = Registry() # "project-type:" YAML project_types = reg.get_project_types() if root.tag in project_types: job['project-type'] = project_types[root.tag] if job['project-type'] == 'pipeline': # For pipeline jobs, they have the # DisableConcurrentBuildsJobProperty tag for not allowing # concurrent builds, but no tag for true. JJB defaults to false, # this is to make it true in the event that the tag doesn't exist if not root.find('properties.DisableConcurrentBuildsJobProperty'): conElement = ET.SubElement(root, 'concurrentBuild') conElement.text = 'true' # Handle each top-level XML element with custom modules/functions in # modules/handlers.py # registry determines difference at runtime if job['project-type'] == 'listview': build.append({'view': job}) reg = Registry(ignore_actions=ignore_actions) viewhandler = Listview(reg) viewhandler.gen_yml(job, root) elif job['project-type'] != 'folder': build.append({'job': job}) reg = Registry(ignore_actions=ignore_actions) handlers = Handlers(reg) handlers.gen_yml(job, root) else: # Project type not currently supported, so output as raw XML if 'maven' in root.tag: job['project-type'] = 'maven' raw = {} raw['xml'] = ET.tostring(root) job['xml'] = {'raw': raw} return yaml.dump(build, default_flow_style=False, default_style=None)