diff --git a/Readme.md b/Readme.md index 1bdc5f3..9200318 100644 --- a/Readme.md +++ b/Readme.md @@ -41,6 +41,14 @@ Plugin](https://plugins.jenkins.io/fstrigger/) ![configuration screen](docs/images/URLTRIGGER_CONF_1.png) +## Notes + +To determine the URL caused invocation - use the environment variable +`URL_TRIGGER_CAUSE` - e.g. `${env.URL_TRIGGER_CAUSE}` + +To determine the response caused invocation - use the environment variable +`URL_TRIGGER_RESPONSE` - e.g. `${env.URL_TRIGGER_RESPONSE}` + ## Declarative Pipeline Syntax Example: diff --git a/pom.xml b/pom.xml index 8b95315..c4e3856 100755 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.plugins plugin - 4.12 + 4.27 urltrigger @@ -141,12 +141,7 @@ commons-net commons-net - 3.6 - - - - commons-lang - commons-lang + 3.8.0 diff --git a/src/main/java/org/jenkinsci/plugins/urltrigger/URLTrigger.java b/src/main/java/org/jenkinsci/plugins/urltrigger/URLTrigger.java index e5a11c3..0cb9e14 100755 --- a/src/main/java/org/jenkinsci/plugins/urltrigger/URLTrigger.java +++ b/src/main/java/org/jenkinsci/plugins/urltrigger/URLTrigger.java @@ -255,6 +255,9 @@ protected boolean checkIfModified(Node pollingNode, XTriggerLog log) throws XTri if (modified) { this.buildCause = new URLTriggerCause( true ) ; this.buildCause.setUrlTrigger(entry.getUrl()); + for(final URLTriggerContentType contentType: entry.getContentTypes()) { + this.buildCause.addTriggerResponse(contentType.getTriggeringResponse()); + } return true; } } diff --git a/src/main/java/org/jenkinsci/plugins/urltrigger/URLTriggerCause.java b/src/main/java/org/jenkinsci/plugins/urltrigger/URLTriggerCause.java index 020d8b3..1428f6b 100644 --- a/src/main/java/org/jenkinsci/plugins/urltrigger/URLTriggerCause.java +++ b/src/main/java/org/jenkinsci/plugins/urltrigger/URLTriggerCause.java @@ -1,7 +1,9 @@ package org.jenkinsci.plugins.urltrigger; import java.io.Serializable; +import java.util.*; +import org.apache.commons.lang3.StringUtils; import org.jenkinsci.lib.xtrigger.XTriggerCause; import hudson.model.Cause; @@ -18,6 +20,7 @@ public class URLTriggerCause extends XTriggerCause implements Serializable { public static final String NAME = "URLTrigger"; public static final String CAUSE = "A change within the response URL invocation"; + private Map triggerResponse; private String urlTrigger; protected URLTriggerCause() { @@ -29,7 +32,19 @@ protected URLTriggerCause( boolean logEnabled ) { } protected URLTriggerCause(String triggerName, String causeFrom, boolean logEnabled) { - super( triggerName , causeFrom , logEnabled ) ; + super(triggerName , causeFrom , logEnabled) ; + } + + public void addTriggerResponse(Map response) { + if (triggerResponse != null) { + triggerResponse.putAll(response); + } else { + setTriggerResponse(response); + } + } + + public void setTriggerResponse(Map response) { + triggerResponse = response; } public void setUrlTrigger(String url) { @@ -41,6 +56,14 @@ public String getShortDescription() { return String.format("[%s] - %s of %s", NAME, CAUSE, urlTrigger); } + public String getTriggerResponse() { + List result = new ArrayList<>(); + if (triggerResponse != null) { + triggerResponse.forEach((key, value) -> result.add(String.format("\"%s\": %s", key, value))); + } + return StringUtils.joinWith(",", result); + } + public String getUrlTrigger() { return urlTrigger; } diff --git a/src/main/java/org/jenkinsci/plugins/urltrigger/content/JSONContentType.java b/src/main/java/org/jenkinsci/plugins/urltrigger/content/JSONContentType.java index 1c093e8..0760c2a 100644 --- a/src/main/java/org/jenkinsci/plugins/urltrigger/content/JSONContentType.java +++ b/src/main/java/org/jenkinsci/plugins/urltrigger/content/JSONContentType.java @@ -25,7 +25,7 @@ public class JSONContentType extends URLTriggerContentType { private transient Map results = null; - private List jsonPaths = new ArrayList(); + private List jsonPaths = new ArrayList<>(); @DataBoundConstructor public JSONContentType(List jsonPaths) { @@ -51,7 +51,7 @@ protected void initForContentType(String content, XTriggerLog log) throws XTrigg } private Map readJsonPath(String content) throws XTriggerException { - Map results = new HashMap(jsonPaths.size()); + Map results = new HashMap<>(jsonPaths.size()); for (JSONContentEntry jsonContentEntry : jsonPaths) { String jsonPath = jsonContentEntry.getJsonPath(); try { @@ -66,6 +66,15 @@ private Map readJsonPath(String content) throws XTriggerExceptio return results; } + @Override + public Map getTriggeringResponse() { + Map payload = new HashMap<>(); + if (results != null) { + results.forEach((key, value) -> payload.put(key, value.toString())); + } + return payload; + } + @Override protected boolean isTriggeringBuildForContent(String content, XTriggerLog log) throws XTriggerException { @@ -96,7 +105,6 @@ protected boolean isTriggeringBuildForContent(String content, XTriggerLog log) t } for (Map.Entry entry : results.entrySet()) { - String jsonPath = entry.getKey(); Object initValue = entry.getValue(); Object newValue = newResults.get(jsonPath); diff --git a/src/main/java/org/jenkinsci/plugins/urltrigger/content/SimpleContentType.java b/src/main/java/org/jenkinsci/plugins/urltrigger/content/SimpleContentType.java index deed5f4..ca32a6d 100644 --- a/src/main/java/org/jenkinsci/plugins/urltrigger/content/SimpleContentType.java +++ b/src/main/java/org/jenkinsci/plugins/urltrigger/content/SimpleContentType.java @@ -3,11 +3,15 @@ import hudson.Extension; import hudson.Util; +import org.apache.commons.lang3.StringUtils; import org.jenkinsci.Symbol; import org.jenkinsci.lib.xtrigger.XTriggerException; import org.jenkinsci.lib.xtrigger.XTriggerLog; import org.kohsuke.stapler.DataBoundConstructor; +import java.util.HashMap; +import java.util.Map; + /** * @author Gregory Boissinot */ @@ -26,6 +30,13 @@ protected void initForContentType(String content, XTriggerLog log) throws XTrigg this.md5 = Util.getDigestOf(content); } + @Override + public Map getTriggeringResponse() { + Map payload = new HashMap<>(); + payload.put("MD5", md5 != null ? md5 : ""); + return payload; + } + @Override protected boolean isTriggeringBuildForContent(String content, XTriggerLog log) throws XTriggerException { diff --git a/src/main/java/org/jenkinsci/plugins/urltrigger/content/TEXTContentType.java b/src/main/java/org/jenkinsci/plugins/urltrigger/content/TEXTContentType.java index d626a43..ed20890 100644 --- a/src/main/java/org/jenkinsci/plugins/urltrigger/content/TEXTContentType.java +++ b/src/main/java/org/jenkinsci/plugins/urltrigger/content/TEXTContentType.java @@ -2,6 +2,7 @@ import hudson.Extension; +import org.apache.commons.lang3.StringUtils; import org.jenkinsci.Symbol; import org.jenkinsci.lib.xtrigger.XTriggerException; import org.jenkinsci.lib.xtrigger.XTriggerLog; @@ -24,7 +25,7 @@ public class TEXTContentType extends URLTriggerContentType { private static final long serialVersionUID = 3560292914545953855L; - private List regExElements = new ArrayList(); + private List regExElements = new ArrayList<>(); private transient Map> capturedValues; @@ -45,6 +46,15 @@ protected void initForContentType(String content, XTriggerLog log) throws XTrigg capturedValues = getMatchedValue(content); } + @Override + public Map getTriggeringResponse() { + Map payload = new HashMap<>(); + if (capturedValues != null) { + capturedValues.forEach((key, value) -> payload.put(key, StringUtils.joinWith(",", value))); + } + return payload; + } + @Override protected boolean isTriggeringBuildForContent(String content, XTriggerLog log) throws XTriggerException { @@ -100,7 +110,7 @@ protected boolean isTriggeringBuildForContent(String content, XTriggerLog log) t private Map> getMatchedValue(String content) throws XTriggerException { - Map> capturedValues = new HashMap>(); + Map> capturedValues = new HashMap<>(); StringReader stringReader = null; BufferedReader bufferedReader = null; @@ -140,7 +150,7 @@ private Map> getMatchedValue(String content) throws XTrigge private Map> addMatchedValue(Map> capturedValues, String regEx, String group) { List values = capturedValues.get(regEx); if (values == null) { - values = new ArrayList(); + values = new ArrayList<>(); values.add(group); capturedValues.put(regEx, values); return capturedValues; diff --git a/src/main/java/org/jenkinsci/plugins/urltrigger/content/URLTriggerContentType.java b/src/main/java/org/jenkinsci/plugins/urltrigger/content/URLTriggerContentType.java index 4f06373..7cf6c71 100644 --- a/src/main/java/org/jenkinsci/plugins/urltrigger/content/URLTriggerContentType.java +++ b/src/main/java/org/jenkinsci/plugins/urltrigger/content/URLTriggerContentType.java @@ -3,13 +3,13 @@ import hudson.ExtensionPoint; import hudson.model.Describable; import hudson.model.Descriptor; -import hudson.model.Hudson; import jenkins.model.Jenkins; import org.jenkinsci.lib.xtrigger.XTriggerException; import org.jenkinsci.lib.xtrigger.XTriggerLog; import java.io.Serializable; +import java.util.Map; /** * @author Gregory Boissinot @@ -33,7 +33,6 @@ public void initForContent(String content, XTriggerLog log) throws XTriggerExcep initForContentType(content, log); } - /** * These methods have to be overridden in each trigger implementation * @@ -47,5 +46,7 @@ public boolean isTriggering(String content, XTriggerLog log) throws XTriggerExce return isTriggeringBuildForContent(content, log); } + public abstract Map getTriggeringResponse(); + protected abstract boolean isTriggeringBuildForContent(String content, XTriggerLog log) throws XTriggerException; } diff --git a/src/main/java/org/jenkinsci/plugins/urltrigger/content/XMLContentType.java b/src/main/java/org/jenkinsci/plugins/urltrigger/content/XMLContentType.java index 4099d95..11c5aed 100644 --- a/src/main/java/org/jenkinsci/plugins/urltrigger/content/XMLContentType.java +++ b/src/main/java/org/jenkinsci/plugins/urltrigger/content/XMLContentType.java @@ -32,9 +32,7 @@ public class XMLContentType extends URLTriggerContentType { private transient Map results = null; - private transient Document xmlDocument; - - private List xPaths = new ArrayList(); + private List xPaths = new ArrayList<>(); @DataBoundConstructor public XMLContentType(List xPaths) { @@ -50,7 +48,7 @@ public List getXPaths() { @Override protected void initForContentType(String content, XTriggerLog log) throws XTriggerException { - xmlDocument = initXMLFile(content); + Document xmlDocument = initXMLFile(content); results = readXMLPath(xmlDocument); } @@ -63,18 +61,14 @@ private Document initXMLFile(String content) throws XTriggerException { xmlDocFactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true) ; xmlDocument = xmlDocFactory.newDocumentBuilder().parse(inputSource); stringReader.close(); - } catch (SAXException e) { - throw new XTriggerException(e); - } catch (IOException e) { - throw new XTriggerException(e); - } catch (ParserConfigurationException e) { + } catch (SAXException | IOException | ParserConfigurationException e) { throw new XTriggerException(e); } return xmlDocument; } private Map readXMLPath(Document document) throws XTriggerException { - Map results = new HashMap(xPaths.size()); + Map results = new HashMap<>(xPaths.size()); XPathFactory xPathFactory = XPathFactory.newInstance(); XPath xPath = xPathFactory.newXPath(); try { @@ -90,6 +84,15 @@ private Map readXMLPath(Document document) throws XTriggerExcept return results; } + @Override + public Map getTriggeringResponse() { + Map payload = new HashMap<>(); + if (results != null) { + results.forEach((key, value) -> payload.put(key, value.toString())); + } + return payload; + } + @Override protected boolean isTriggeringBuildForContent(String content, XTriggerLog log) throws XTriggerException { diff --git a/src/main/java/org/jenkinsci/plugins/urltrigger/environment/URLTriggerEnvironmentContributor.java b/src/main/java/org/jenkinsci/plugins/urltrigger/environment/URLTriggerEnvironmentContributor.java index 5c315bb..b94d89a 100644 --- a/src/main/java/org/jenkinsci/plugins/urltrigger/environment/URLTriggerEnvironmentContributor.java +++ b/src/main/java/org/jenkinsci/plugins/urltrigger/environment/URLTriggerEnvironmentContributor.java @@ -30,6 +30,7 @@ public void buildEnvironmentFor(@Nonnull Run r, @Nonnull EnvVars envs, @Nonnull } if (cause != null) { envs.override("URL_TRIGGER_CAUSE", cause.getUrlTrigger()); + envs.override("URL_TRIGGER_RESPONSE", cause.getTriggerResponse()); } } }