diff --git a/jenkins_jobs/modules/triggers.py b/jenkins_jobs/modules/triggers.py index bffcd08b3..fa78f5245 100644 --- a/jenkins_jobs/modules/triggers.py +++ b/jenkins_jobs/modules/triggers.py @@ -454,6 +454,43 @@ def build_result(parser, xml_parent, data): XML.SubElement(model_checked, 'checked').text = result_dict[result] +def script(parser, xml_parent, data): + """yaml: script + Triggers the job using shell or batch script. + Requires the Jenkins `ScriptTrigger Plugin. + `_ + + :arg str label: Restrict where the polling should run. (default '') + :arg str script: A shell or batch script. (default '') + :arg str cron: cron syntax of when to run (default '') + :arg bool enable-concurrent: Enables triggering concurrent builds. + (default false) + :arg int exit-code: If the exit code of the script execution returns this + expected exit code, a build is scheduled. (default 0) + + Example: + + .. literalinclude:: /../../tests/triggers/fixtures/script.yaml + """ + data = data if data else {} + st = XML.SubElement( + xml_parent, + 'org.jenkinsci.plugins.scripttrigger.ScriptTrigger' + ) + label = data.get('label') + + XML.SubElement(st, 'script').text = str(data.get('script', '')) + XML.SubElement(st, 'scriptFilePath').text = str( + data.get('script-file-path', '')) + XML.SubElement(st, 'spec').text = str(data.get('cron', '')) + XML.SubElement(st, 'labelRestriction').text = str(bool(label)).lower() + if label: + XML.SubElement(st, 'triggerLabel').text = label + XML.SubElement(st, 'enableConcurrentBuild').text = str( + data.get('enable-concurrent', False)).lower() + XML.SubElement(st, 'exitCode').text = str(data.get('exit-code', 0)) + + class Triggers(jenkins_jobs.modules.base.Base): sequence = 50 diff --git a/setup.py b/setup.py index 4a7c542b9..f83fcf645 100644 --- a/setup.py +++ b/setup.py @@ -190,6 +190,7 @@ setuptools.setup( 'github_pull_request'), 'pollscm=jenkins_jobs.modules.triggers:pollscm', 'timed=jenkins_jobs.modules.triggers:timed', + 'script=jenkins_jobs.modules.triggers:script', ], 'jenkins_jobs.wrappers': [ 'ansicolor=jenkins_jobs.modules.wrappers:ansicolor', diff --git a/tests/triggers/fixtures/script.xml b/tests/triggers/fixtures/script.xml new file mode 100644 index 000000000..028f8db42 --- /dev/null +++ b/tests/triggers/fixtures/script.xml @@ -0,0 +1,14 @@ + + + + + + + H/15 * * * * + true + master + false + 0 + + + diff --git a/tests/triggers/fixtures/script.yaml b/tests/triggers/fixtures/script.yaml new file mode 100644 index 000000000..b66d13eeb --- /dev/null +++ b/tests/triggers/fixtures/script.yaml @@ -0,0 +1,8 @@ +triggers: + - script: + script: 'exit 0' + cron: 'H/15 * * * *' + enable-concurrent: False + label: master + exit-code: 0 +