diff --git a/jenkins_jobs/modules/builders.py b/jenkins_jobs/modules/builders.py index 2b5a5eeb3..9be624bca 100644 --- a/jenkins_jobs/modules/builders.py +++ b/jenkins_jobs/modules/builders.py @@ -1949,3 +1949,42 @@ def sonatype_clm(parser, xml_parent, data): data.get('module-excludes', '')).lower() XML.SubElement(path_config, 'scanProperties').text = str( data.get('advanced-options', '')).lower() + + +def beaker(parser, xml_parent, data): + """yaml: beaker + Execute a beaker build step. Requires the Jenkins :jenkins-wiki:`Beaker + Builder Plugin `. + + :arg str content: Run job from string + (Alternative: you can choose a path instead) + :arg str path: Run job from file + (Alternative: you can choose a content instead) + :arg bool download-logs: Download Beaker log files (default false) + + Example: + + .. literalinclude:: ../../tests/builders/fixtures/beaker-path.yaml + :language: yaml + + .. literalinclude:: ../../tests/builders/fixtures/beaker-content.yaml + :language: yaml + """ + beaker = XML.SubElement(xml_parent, 'org.jenkinsci.plugins.beakerbuilder.' + 'BeakerBuilder') + jobSource = XML.SubElement(beaker, 'jobSource') + if 'content' in data and 'path' in data: + raise JenkinsJobsException("Use just one of 'content' or 'path'") + elif 'content' in data: + jobSourceClass = "org.jenkinsci.plugins.beakerbuilder.StringJobSource" + jobSource.set('class', jobSourceClass) + XML.SubElement(jobSource, 'jobContent').text = data['content'] + elif 'path' in data: + jobSourceClass = "org.jenkinsci.plugins.beakerbuilder.FileJobSource" + jobSource.set('class', jobSourceClass) + XML.SubElement(jobSource, 'jobPath').text = data['path'] + else: + raise JenkinsJobsException("Use one of 'content' or 'path'") + + XML.SubElement(beaker, 'downloadFiles').text = str(data.get( + 'download-logs', False)).lower() diff --git a/setup.cfg b/setup.cfg index caba307a5..bc5e396cf 100644 --- a/setup.cfg +++ b/setup.cfg @@ -47,6 +47,7 @@ jenkins_jobs.builders = ant=jenkins_jobs.modules.builders:ant artifact-resolver=jenkins_jobs.modules.builders:artifact_resolver batch=jenkins_jobs.modules.builders:batch + beaker=jenkins_jobs.modules.builders:beaker builders-from=jenkins_jobs.modules.builders:builders_from change-assembly-version=jenkins_jobs.modules.builders:change_assembly_version cmake=jenkins_jobs.modules.builders:cmake diff --git a/tests/builders/fixtures/beaker-content.xml b/tests/builders/fixtures/beaker-content.xml new file mode 100644 index 000000000..8bd3628a3 --- /dev/null +++ b/tests/builders/fixtures/beaker-content.xml @@ -0,0 +1,16 @@ + + + + + + <job group='product-QA'> + <whiteboard> + Apache 2.2 test + </whiteboard> +</job> + + + false + + + diff --git a/tests/builders/fixtures/beaker-content.yaml b/tests/builders/fixtures/beaker-content.yaml new file mode 100644 index 000000000..e8ad30079 --- /dev/null +++ b/tests/builders/fixtures/beaker-content.yaml @@ -0,0 +1,8 @@ +builders: + - beaker: + content: | + + + Apache 2.2 test + + diff --git a/tests/builders/fixtures/beaker-path.xml b/tests/builders/fixtures/beaker-path.xml new file mode 100644 index 000000000..608ddce34 --- /dev/null +++ b/tests/builders/fixtures/beaker-path.xml @@ -0,0 +1,11 @@ + + + + + + test.xml + + true + + + diff --git a/tests/builders/fixtures/beaker-path.yaml b/tests/builders/fixtures/beaker-path.yaml new file mode 100644 index 000000000..34eb749f0 --- /dev/null +++ b/tests/builders/fixtures/beaker-path.yaml @@ -0,0 +1,4 @@ +builders: + - beaker: + path: 'test.xml' + download-logs: true