summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZuul <zuul@review.openstack.org>2019-04-09 01:37:53 +0000
committerGerrit Code Review <review@openstack.org>2019-04-09 01:37:53 +0000
commit7d2d71d58570eb4125f8a782f8286c0cbb6adca8 (patch)
tree4a2c400818edac4d63eeabd10912621bb0a85293
parentec607844283942523cb31460d33b4a789cb61ca9 (diff)
parent8cb88e0304c5d19bd8f49f7eb99f9e1c267188fa (diff)
downloadpython-jenkins-job-builder-7d2d71d58570eb4125f8a782f8286c0cbb6adca8.tar.gz
python-jenkins-job-builder-7d2d71d58570eb4125f8a782f8286c0cbb6adca8.tar.xz
python-jenkins-job-builder-7d2d71d58570eb4125f8a782f8286c0cbb6adca8.zip
Merge "[jenkins-job-builder] - Add support for Generic Webhook Trigger"
-rw-r--r--jenkins_jobs/modules/triggers.py127
-rw-r--r--tests/triggers/fixtures/generic-webhook-trigger-full.xml43
-rw-r--r--tests/triggers/fixtures/generic-webhook-trigger-full.yaml26
-rw-r--r--tests/triggers/fixtures/generic-webhook-trigger000.xml24
-rw-r--r--tests/triggers/fixtures/generic-webhook-trigger000.yaml5
-rw-r--r--tests/triggers/fixtures/generic-webhook-trigger001.xml21
-rw-r--r--tests/triggers/fixtures/generic-webhook-trigger001.yaml5
-rw-r--r--tests/triggers/fixtures/generic-webhook-trigger002.xml21
-rw-r--r--tests/triggers/fixtures/generic-webhook-trigger002.yaml5
-rw-r--r--tests/triggers/fixtures/generic-webhook-trigger003.xml21
-rw-r--r--tests/triggers/fixtures/generic-webhook-trigger003.yaml5
11 files changed, 303 insertions, 0 deletions
diff --git a/jenkins_jobs/modules/triggers.py b/jenkins_jobs/modules/triggers.py
index 3f75ad47..f128a354 100644
--- a/jenkins_jobs/modules/triggers.py
+++ b/jenkins_jobs/modules/triggers.py
@@ -2186,6 +2186,133 @@ def stash_pull_request(registry, xml_parent, data):
pr_trigger, data, mappings, fail_required=True)
+def generic_webhook_trigger(registry, xml_parent, data):
+ """yaml: generic-webhook-trigger
+ Generic webhook trigger. Trigger when a set of parameters are submitted.
+ Requires the Jenkins
+ :jenkins-wiki:`Generic Webhook Trigger <Generic+Webhook+Trigger+Plugin>`.
+
+
+ :arg string token: A token to use to trigger the job. (default '')
+ :arg bool print-post-content: Print post content in job log.
+ :arg bool print-contrib-var: Print contributed variables in job log.
+ :arg bool silent-response: Avoid responding with information about
+ triggered jobs.
+ :arg string cause: This will be displayed in any triggered job.
+ :arg string regex-filter-expression: Regular expression to test on the
+ evaluated text specified in regex-filter-text
+ :arg string regex-filter-text: Text to test for the given
+ regexp-filter-expression.
+
+ :arg list post-content-params: Parameters to use from posted JSON/XML
+
+ :post-content-params: * **type** (`string`) -- JSONPath or XPath
+ * **key** (`string`) -- Variable name
+ * **value** (`string`) -- Expression to evaluate in POST content.
+ Use JSONPath for JSON or XPath for XML.
+ * **regex-filter** (`string`) -- Anything in the evaluated value,
+ matching this regular expression, will be removed. (optional)
+ * **default-value** (`string`) -- This value will be used if
+ expression does not match anything. (optional)
+
+ :arg list request-params: Parameters to use passed in as request arguments
+
+ :request-params: * **key** (`string`) -- Name of request parameter
+ * **regex-filter** (`string`) -- Anything in the evaluated value,
+ matching this regular expression, will be removed. (optional)
+ :arg list header-params: Parameters to use passed in as headers
+
+ :header-params: * **key** (`string`) -- Name of request header in
+ lowercase. Resulting variable name has '_' instead of '-'
+ characters.
+ * **regex-filter** (`string`) -- Anything in the evaluated value,
+ matching this regular expression, will be removed. (optional)
+
+ Example:
+
+ .. literalinclude::
+ /../../tests/triggers/fixtures/generic-webhook-trigger-full.yaml
+ """
+
+ namespace = 'org.jenkinsci.plugins.gwt.'
+ gwtrig = XML.SubElement(xml_parent,
+ namespace + 'GenericTrigger')
+ gwtrig.set('plugin', 'generic-webhook-trigger')
+ XML.SubElement(gwtrig, 'spec')
+
+ # Generic Varibles (Post content parameters in UI)
+ try:
+ if data.get('post-content-params'):
+ gen_vars = XML.SubElement(gwtrig, 'genericVariables')
+ mappings = [
+ ('type', 'expressionType', '', ['JSONPath', 'XPath']),
+ ('key', 'key', ''),
+ ('value', 'value', ''),
+ ('regex-filter', 'regexpFilter', ''),
+ ('default-value', 'defaultValue', ''),
+ ]
+
+ for gen_var_list in data.get('post-content-params'):
+ gen_var_tag = XML.SubElement(
+ gen_vars, namespace + 'GenericVariable')
+ helpers.convert_mapping_to_xml(
+ gen_var_tag, gen_var_list, mappings, fail_required=True)
+ except AttributeError:
+ pass
+
+ # This is dropped here in the middle as that's how the jenkins config is
+ # done. It probably doesn't need to be, but since this is the first
+ # swing..
+ mapping = [
+ ('regex-filter-text', 'regexpFilterText', ''),
+ ('regex-filter-expression', 'regexpFilterExpression', '')
+ ]
+ helpers.convert_mapping_to_xml(gwtrig, data, mapping, fail_required=False)
+
+ # Generic Request Variables (Request parameters in UI)
+ try:
+ if data.get('request-params'):
+ gen_req_vars = XML.SubElement(gwtrig, 'genericRequestVariables')
+ mappings = [
+ ('key', 'key', ''),
+ ('regex-filter', 'regexpFilter', '')
+ ]
+
+ for gen_req_list in data.get('request-params'):
+ gen_req_tag = XML.SubElement(
+ gen_req_vars, namespace + 'GenericRequestVariable')
+ helpers.convert_mapping_to_xml(
+ gen_req_tag, gen_req_list, mappings, fail_required=False)
+ except AttributeError:
+ pass
+
+ try:
+ if data.get('header-params'):
+ gen_header_vars = XML.SubElement(gwtrig, 'genericHeaderVariables')
+ mappings = [
+ ('key', 'key', ''),
+ ('regex-filter', 'regexpFilter', '')
+ ]
+ for gen_header_list in data.get('header-params'):
+ gen_header_tag = XML.SubElement(
+ gen_header_vars, namespace + 'GenericHeaderVariable')
+ helpers.convert_mapping_to_xml(
+ gen_header_tag, gen_header_list, mappings,
+ fail_required=False)
+ except AttributeError:
+ pass
+
+ mapping = [
+ ('print-post-content', 'printPostContent', False),
+ ('print-contrib-var', 'printContributedVariables', False),
+ ('cause', 'causeString', ''),
+ ('token', 'token', ''),
+ ('silent-response', 'silentResponse', False),
+ ]
+ # This should cover all the top level
+ helpers.convert_mapping_to_xml(gwtrig, data, mapping, fail_required=False)
+
+
class Triggers(jenkins_jobs.modules.base.Base):
sequence = 50
diff --git a/tests/triggers/fixtures/generic-webhook-trigger-full.xml b/tests/triggers/fixtures/generic-webhook-trigger-full.xml
new file mode 100644
index 00000000..d3fd9624
--- /dev/null
+++ b/tests/triggers/fixtures/generic-webhook-trigger-full.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<project>
+ <triggers class="vector">
+ <org.jenkinsci.plugins.gwt.GenericTrigger plugin="generic-webhook-trigger">
+ <spec/>
+ <genericVariables>
+ <org.jenkinsci.plugins.gwt.GenericVariable>
+ <expressionType>JSONPath</expressionType>
+ <key>action</key>
+ <value>$.action</value>
+ <regexpFilter>value_filter</regexpFilter>
+ <defaultValue>default_value</defaultValue>
+ </org.jenkinsci.plugins.gwt.GenericVariable>
+ <org.jenkinsci.plugins.gwt.GenericVariable>
+ <expressionType>XPath</expressionType>
+ <key>blah</key>
+ <value>whooga</value>
+ <regexpFilter>value_filer</regexpFilter>
+ <defaultValue>default_something</defaultValue>
+ </org.jenkinsci.plugins.gwt.GenericVariable>
+ </genericVariables>
+ <regexpFilterText>$action</regexpFilterText>
+ <regexpFilterExpression>^(opened|reopened|synchronize)$</regexpFilterExpression>
+ <genericRequestVariables>
+ <org.jenkinsci.plugins.gwt.GenericRequestVariable>
+ <key>request_test_1</key>
+ <regexpFilter>requesT_value_1</regexpFilter>
+ </org.jenkinsci.plugins.gwt.GenericRequestVariable>
+ </genericRequestVariables>
+ <genericHeaderVariables>
+ <org.jenkinsci.plugins.gwt.GenericHeaderVariable>
+ <key>header_test1</key>
+ <regexpFilter>header_value1</regexpFilter>
+ </org.jenkinsci.plugins.gwt.GenericHeaderVariable>
+ </genericHeaderVariables>
+ <printPostContent>true</printPostContent>
+ <printContributedVariables>true</printContributedVariables>
+ <causeString>Generic Cause</causeString>
+ <token>blah</token>
+ <silentResponse>true</silentResponse>
+ </org.jenkinsci.plugins.gwt.GenericTrigger>
+ </triggers>
+</project>
diff --git a/tests/triggers/fixtures/generic-webhook-trigger-full.yaml b/tests/triggers/fixtures/generic-webhook-trigger-full.yaml
new file mode 100644
index 00000000..70b3b765
--- /dev/null
+++ b/tests/triggers/fixtures/generic-webhook-trigger-full.yaml
@@ -0,0 +1,26 @@
+triggers:
+ - generic-webhook-trigger:
+ post-content-params:
+ - type: JSONPath
+ key: action
+ value: $.action
+ regex-filter: value_filter
+ default-value: default_value
+ - type: XPath
+ key: blah
+ value: whooga
+ regex-filter: value_filer
+ default-value: default_something
+ regex-filter-text: $action
+ regex-filter-expression: ^(opened|reopened|synchronize)$
+ request-params:
+ - key: request_test_1
+ regex-filter: requesT_value_1
+ header-params:
+ - key: header_test1
+ regex-filter: header_value1
+ print-post-content: true
+ print-contrib-var: true
+ cause: Generic Cause
+ token: blah
+ silent-response: true
diff --git a/tests/triggers/fixtures/generic-webhook-trigger000.xml b/tests/triggers/fixtures/generic-webhook-trigger000.xml
new file mode 100644
index 00000000..cc285db7
--- /dev/null
+++ b/tests/triggers/fixtures/generic-webhook-trigger000.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<project>
+ <triggers class="vector">
+ <org.jenkinsci.plugins.gwt.GenericTrigger plugin="generic-webhook-trigger">
+ <spec/>
+ <genericVariables>
+ <org.jenkinsci.plugins.gwt.GenericVariable>
+ <expressionType>JSONPath</expressionType>
+ <key>action</key>
+ <value/>
+ <regexpFilter/>
+ <defaultValue/>
+ </org.jenkinsci.plugins.gwt.GenericVariable>
+ </genericVariables>
+ <regexpFilterText/>
+ <regexpFilterExpression/>
+ <printPostContent>false</printPostContent>
+ <printContributedVariables>false</printContributedVariables>
+ <causeString/>
+ <token/>
+ <silentResponse>false</silentResponse>
+ </org.jenkinsci.plugins.gwt.GenericTrigger>
+ </triggers>
+</project>
diff --git a/tests/triggers/fixtures/generic-webhook-trigger000.yaml b/tests/triggers/fixtures/generic-webhook-trigger000.yaml
new file mode 100644
index 00000000..0e42a5fc
--- /dev/null
+++ b/tests/triggers/fixtures/generic-webhook-trigger000.yaml
@@ -0,0 +1,5 @@
+triggers:
+ - generic-webhook-trigger:
+ post-content-params:
+ - type: JSONPath
+ key: action
diff --git a/tests/triggers/fixtures/generic-webhook-trigger001.xml b/tests/triggers/fixtures/generic-webhook-trigger001.xml
new file mode 100644
index 00000000..9ba8f399
--- /dev/null
+++ b/tests/triggers/fixtures/generic-webhook-trigger001.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<project>
+ <triggers class="vector">
+ <org.jenkinsci.plugins.gwt.GenericTrigger plugin="generic-webhook-trigger">
+ <spec/>
+ <regexpFilterText/>
+ <regexpFilterExpression/>
+ <genericRequestVariables>
+ <org.jenkinsci.plugins.gwt.GenericRequestVariable>
+ <key>action</key>
+ <regexpFilter>boogie</regexpFilter>
+ </org.jenkinsci.plugins.gwt.GenericRequestVariable>
+ </genericRequestVariables>
+ <printPostContent>false</printPostContent>
+ <printContributedVariables>false</printContributedVariables>
+ <causeString/>
+ <token/>
+ <silentResponse>false</silentResponse>
+ </org.jenkinsci.plugins.gwt.GenericTrigger>
+ </triggers>
+</project>
diff --git a/tests/triggers/fixtures/generic-webhook-trigger001.yaml b/tests/triggers/fixtures/generic-webhook-trigger001.yaml
new file mode 100644
index 00000000..2ec718b5
--- /dev/null
+++ b/tests/triggers/fixtures/generic-webhook-trigger001.yaml
@@ -0,0 +1,5 @@
+triggers:
+ - generic-webhook-trigger:
+ request-params:
+ - regex-filter: "boogie"
+ key: action
diff --git a/tests/triggers/fixtures/generic-webhook-trigger002.xml b/tests/triggers/fixtures/generic-webhook-trigger002.xml
new file mode 100644
index 00000000..67bb288b
--- /dev/null
+++ b/tests/triggers/fixtures/generic-webhook-trigger002.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<project>
+ <triggers class="vector">
+ <org.jenkinsci.plugins.gwt.GenericTrigger plugin="generic-webhook-trigger">
+ <spec/>
+ <regexpFilterText/>
+ <regexpFilterExpression/>
+ <genericHeaderVariables>
+ <org.jenkinsci.plugins.gwt.GenericHeaderVariable>
+ <key>action</key>
+ <regexpFilter>boogie</regexpFilter>
+ </org.jenkinsci.plugins.gwt.GenericHeaderVariable>
+ </genericHeaderVariables>
+ <printPostContent>false</printPostContent>
+ <printContributedVariables>false</printContributedVariables>
+ <causeString/>
+ <token/>
+ <silentResponse>false</silentResponse>
+ </org.jenkinsci.plugins.gwt.GenericTrigger>
+ </triggers>
+</project>
diff --git a/tests/triggers/fixtures/generic-webhook-trigger002.yaml b/tests/triggers/fixtures/generic-webhook-trigger002.yaml
new file mode 100644
index 00000000..e28ea149
--- /dev/null
+++ b/tests/triggers/fixtures/generic-webhook-trigger002.yaml
@@ -0,0 +1,5 @@
+triggers:
+ - generic-webhook-trigger:
+ header-params:
+ - regex-filter: "boogie"
+ key: action
diff --git a/tests/triggers/fixtures/generic-webhook-trigger003.xml b/tests/triggers/fixtures/generic-webhook-trigger003.xml
new file mode 100644
index 00000000..67bb288b
--- /dev/null
+++ b/tests/triggers/fixtures/generic-webhook-trigger003.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<project>
+ <triggers class="vector">
+ <org.jenkinsci.plugins.gwt.GenericTrigger plugin="generic-webhook-trigger">
+ <spec/>
+ <regexpFilterText/>
+ <regexpFilterExpression/>
+ <genericHeaderVariables>
+ <org.jenkinsci.plugins.gwt.GenericHeaderVariable>
+ <key>action</key>
+ <regexpFilter>boogie</regexpFilter>
+ </org.jenkinsci.plugins.gwt.GenericHeaderVariable>
+ </genericHeaderVariables>
+ <printPostContent>false</printPostContent>
+ <printContributedVariables>false</printContributedVariables>
+ <causeString/>
+ <token/>
+ <silentResponse>false</silentResponse>
+ </org.jenkinsci.plugins.gwt.GenericTrigger>
+ </triggers>
+</project>
diff --git a/tests/triggers/fixtures/generic-webhook-trigger003.yaml b/tests/triggers/fixtures/generic-webhook-trigger003.yaml
new file mode 100644
index 00000000..e28ea149
--- /dev/null
+++ b/tests/triggers/fixtures/generic-webhook-trigger003.yaml
@@ -0,0 +1,5 @@
+triggers:
+ - generic-webhook-trigger:
+ header-params:
+ - regex-filter: "boogie"
+ key: action