diff --git a/jenkins_jobs/modules/triggers.py b/jenkins_jobs/modules/triggers.py index 99db03b19..134c03cef 100644 --- a/jenkins_jobs/modules/triggers.py +++ b/jenkins_jobs/modules/triggers.py @@ -1804,6 +1804,55 @@ def parameterized_timer(parser, xml_parent, data): convert_mapping_to_xml(param_timer, data, mapping, fail_required=True) +def jira_comment_trigger(registry, xml_parent, data): + """yaml: jira-comment-trigger + Trigger builds when a comment is added to JIRA. + Requires the Jenkins :jenkins-wiki:`JIRA Trigger Plugin + `. + + :arg str jql-filter: Must match updated issues to trigger a build. + (default '') + :arg str comment-pattern: Triggers build only when the comment added to + JIRA matches pattern (default '(?i)build this please') + :arg list parameter-mapping: + + :Issue Attribute Path: + * **jenkins-parameter** (`str`) -- Jenkins parameter name + (default '') + * **issue-attribute-path** (`str`) -- Attribute path (default '') + + Minimal Example: + + .. literalinclude:: + /../../tests/triggers/fixtures/jira-comment-trigger-minimal.yaml + :language: yaml + + Full Example: + + .. literalinclude:: + /../../tests/triggers/fixtures/jira-comment-trigger-full.yaml + :language: yaml + """ + jct = XML.SubElement(xml_parent, 'com.ceilfors.jenkins.plugins.' + 'jiratrigger.JiraCommentTrigger') + jct.set('plugin', 'jira-trigger') + mapping = [ + ('jql-filter', 'jqlFilter', ''), + ('comment-pattern', 'commentPattern', '(?i)build this please')] + convert_mapping_to_xml(jct, data, mapping, fail_required=True) + + param = XML.SubElement(jct, 'parameterMappings') + for parameter in data.get('parameter-mapping', []): + parent = XML.SubElement(param, 'com.ceilfors.jenkins.plugins.' + 'jiratrigger.parameter.' + 'IssueAttributePathParameterMapping') + parameter_mappings = [ + ('jenkins-parameter', 'jenkinsParameter', ''), + ('issue-attribute-path', 'issueAttributePath', '')] + convert_mapping_to_xml( + parent, parameter, parameter_mappings, fail_required=True) + + class Triggers(jenkins_jobs.modules.base.Base): sequence = 50 diff --git a/tests/triggers/fixtures/jira-comment-trigger-full.xml b/tests/triggers/fixtures/jira-comment-trigger-full.xml new file mode 100644 index 000000000..b4a696919 --- /dev/null +++ b/tests/triggers/fixtures/jira-comment-trigger-full.xml @@ -0,0 +1,15 @@ + + + + + filter + comment + + + param1 + path/to/attribute + + + + + diff --git a/tests/triggers/fixtures/jira-comment-trigger-full.yaml b/tests/triggers/fixtures/jira-comment-trigger-full.yaml new file mode 100644 index 000000000..d04280f16 --- /dev/null +++ b/tests/triggers/fixtures/jira-comment-trigger-full.yaml @@ -0,0 +1,7 @@ +triggers: + - jira-comment-trigger: + jql-filter: filter + comment-pattern: comment + parameter-mapping: + - jenkins-parameter: param1 + issue-attribute-path: 'path/to/attribute' diff --git a/tests/triggers/fixtures/jira-comment-trigger-minimal.xml b/tests/triggers/fixtures/jira-comment-trigger-minimal.xml new file mode 100644 index 000000000..d2dd8aaba --- /dev/null +++ b/tests/triggers/fixtures/jira-comment-trigger-minimal.xml @@ -0,0 +1,10 @@ + + + + + + (?i)build this please + + + + diff --git a/tests/triggers/fixtures/jira-comment-trigger-minimal.yaml b/tests/triggers/fixtures/jira-comment-trigger-minimal.yaml new file mode 100644 index 000000000..8273f07d0 --- /dev/null +++ b/tests/triggers/fixtures/jira-comment-trigger-minimal.yaml @@ -0,0 +1,2 @@ +triggers: + - jira-comment-trigger