diff --git a/pom.xml b/pom.xml old mode 100644 new mode 100755 index 3441fdd..d666999 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ THE SOFTWARE. org.jenkins-ci.plugins plugin - 1.424 + 3.51 scripttrigger @@ -52,6 +52,8 @@ THE SOFTWARE. + 2.176.1 + 8 UTF-8 1.6 1.6 diff --git a/src/main/java/org/jenkinsci/plugins/scripttrigger/AbstractTrigger.java b/src/main/java/org/jenkinsci/plugins/scripttrigger/AbstractTrigger.java old mode 100644 new mode 100755 index 90bd1fc..3d4935b --- a/src/main/java/org/jenkinsci/plugins/scripttrigger/AbstractTrigger.java +++ b/src/main/java/org/jenkinsci/plugins/scripttrigger/AbstractTrigger.java @@ -23,6 +23,7 @@ package org.jenkinsci.plugins.scripttrigger; import antlr.ANTLRException; +import com.google.common.base.Charsets; import hudson.Util; import hudson.model.Action; import hudson.model.BuildableItem; @@ -71,7 +72,7 @@ protected String getName() { @Override protected String getCause() { try { - String scriptContent = Util.loadFile(getLogFile()); + String scriptContent = Util.loadFile(getLogFile(), Charsets.UTF_8); String cause = extractRootCause(scriptContent); if (cause == null) { return getDefaultMessageCause(); @@ -92,12 +93,12 @@ private String extractRootCause(String content) { protected Action[] getScheduledActions(Node pollingNode, XTriggerLog log) { String scriptContent; try { - scriptContent = Util.loadFile(getLogFile()); + scriptContent = Util.loadFile(getLogFile(), Charsets.UTF_8); } catch (IOException e) { return new Action[0]; } - List actionList = new ArrayList(); + List actionList = new ArrayList<>(); String description = extractDescription(scriptContent); if (description != null) { actionList.add(new ScriptTriggerRunAction(description)); diff --git a/src/main/java/org/jenkinsci/plugins/scripttrigger/ScriptTrigger.java b/src/main/java/org/jenkinsci/plugins/scripttrigger/ScriptTrigger.java old mode 100644 new mode 100755 index 4360ebd..c18a80e --- a/src/main/java/org/jenkinsci/plugins/scripttrigger/ScriptTrigger.java +++ b/src/main/java/org/jenkinsci/plugins/scripttrigger/ScriptTrigger.java @@ -39,6 +39,7 @@ import java.nio.charset.Charset; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.Map; /** @@ -123,12 +124,16 @@ private boolean checkIfModifiedWithScriptsEvaluation(Node executingNode, int exp ScriptTriggerExecutor executor = getScriptTriggerExecutor(log); - EnvVarsResolver envVarsResolver = new EnvVarsResolver(); Map envVars; - try { - envVars = envVarsResolver.getPollingEnvVars((AbstractProject) job, executingNode); - } catch (EnvInjectException e) { - throw new ScriptTriggerException(e); + if (job instanceof AbstractProject) { + EnvVarsResolver envVarsResolver = new EnvVarsResolver(); + try { + envVars = envVarsResolver.getPollingEnvVars((AbstractProject) job, executingNode); + } catch (EnvInjectException e) { + throw new ScriptTriggerException(e); + } + } else { + envVars = new HashMap<>(); } if (script != null) { @@ -189,8 +194,8 @@ public InternalScriptTriggerAction(String actionTitle) { } @SuppressWarnings("unused") - public AbstractProject getOwner() { - return (AbstractProject) job; + public BuildableItem getOwner() { + return job; } @Override diff --git a/src/main/java/org/jenkinsci/plugins/scripttrigger/ScriptTriggerExecutor.java b/src/main/java/org/jenkinsci/plugins/scripttrigger/ScriptTriggerExecutor.java old mode 100644 new mode 100755 index d31da29..b2e556b --- a/src/main/java/org/jenkinsci/plugins/scripttrigger/ScriptTriggerExecutor.java +++ b/src/main/java/org/jenkinsci/plugins/scripttrigger/ScriptTriggerExecutor.java @@ -32,6 +32,7 @@ import hudson.tasks.CommandInterpreter; import hudson.tasks.Shell; import org.jenkinsci.lib.xtrigger.XTriggerLog; +import org.jenkinsci.remoting.RoleChecker; import java.io.*; import java.util.Map; @@ -78,6 +79,9 @@ protected String getStringContent(Node executingNode, final String filePath) thr try { return executingNode.getRootPath().act(new FilePath.FileCallable() { + @Override + public void checkRoles(RoleChecker roleChecker) throws SecurityException { + } public String invoke(File f, VirtualChannel channel) throws IOException, InterruptedException { StringBuffer content = new StringBuffer(); @@ -106,6 +110,10 @@ private int executeScript(final Node executingNode, final String scriptContent, try { boolean isUnix = executingNode.getRootPath().act(new Callable() { + @Override + public void checkRoles(RoleChecker roleChecker) throws SecurityException { + } + public Boolean call() throws ScriptTriggerException { return File.pathSeparatorChar == ':'; } @@ -125,6 +133,10 @@ public Boolean call() throws ScriptTriggerException { throw new ScriptTriggerException("The node is offline."); } return rootPath.act(new FilePath.FileCallable() { + @Override + public void checkRoles(RoleChecker roleChecker) throws SecurityException { + } + public Integer invoke(File f, VirtualChannel channel) throws IOException, InterruptedException { try { return getLocalLauncher(log.getListener()).launch().cmds(cmd).envs(envVars).stdout(log.getListener()).pwd(rootPath).join(); @@ -159,6 +171,10 @@ private Launcher getLocalLauncher(TaskListener listener) throws ScriptTriggerExc protected boolean existsScript(Node executingNode, final String path) throws ScriptTriggerException { try { return executingNode.getRootPath().act(new Callable() { + @Override + public void checkRoles(RoleChecker roleChecker) throws SecurityException { + } + public Boolean call() throws ScriptTriggerException { File f = new File(path); if (!f.exists()) { diff --git a/src/main/java/org/jenkinsci/plugins/scripttrigger/groovy/GroovyScriptTrigger.java b/src/main/java/org/jenkinsci/plugins/scripttrigger/groovy/GroovyScriptTrigger.java old mode 100644 new mode 100755 index 4e5a79f..7903f13 --- a/src/main/java/org/jenkinsci/plugins/scripttrigger/groovy/GroovyScriptTrigger.java +++ b/src/main/java/org/jenkinsci/plugins/scripttrigger/groovy/GroovyScriptTrigger.java @@ -30,6 +30,7 @@ import hudson.model.*; import hudson.remoting.VirtualChannel; import hudson.security.ACL; +import jenkins.model.Jenkins; import org.acegisecurity.Authentication; import org.acegisecurity.context.SecurityContextHolder; import org.apache.commons.jelly.XMLOutput; @@ -40,6 +41,7 @@ import org.jenkinsci.plugins.scripttrigger.AbstractTrigger; import org.jenkinsci.plugins.scripttrigger.LabelRestrictionClass; import org.jenkinsci.plugins.scripttrigger.ScriptTriggerException; +import org.jenkinsci.remoting.RoleChecker; import org.kohsuke.stapler.DataBoundConstructor; import java.io.File; @@ -48,8 +50,6 @@ import java.nio.charset.Charset; import java.util.*; -import jenkins.model.Jenkins; - /** * @author Gregory Boissinot @@ -127,6 +127,9 @@ protected Action[] getScheduledActions(Node pollingNode, final XTriggerLog log) throw new ScriptTriggerException("The node is offline."); } return rootPath.act(new FilePath.FileCallable() { + @Override + public void checkRoles(RoleChecker roleChecker) throws SecurityException { + } public Action[] invoke(File f, VirtualChannel channel) throws IOException, InterruptedException { File propFile = new File(propertiesFilePath); @@ -166,25 +169,28 @@ protected boolean checkIfModified(Node pollingNode, XTriggerLog log) throws Scri try { GroovyScriptTriggerExecutor executor = getGroovyScriptTriggerExecutor(log); - final AbstractProject proj = (AbstractProject) job; - EnvVarsResolver envVarsResolver = new EnvVarsResolver(); Map envVars; - try { - envVars = envVarsResolver.getPollingEnvVars(proj, pollingNode); - } catch (EnvInjectException e) { - throw new ScriptTriggerException(e); + if (job instanceof AbstractProject) { + EnvVarsResolver envVarsResolver = new EnvVarsResolver(); + try { + envVars = envVarsResolver.getPollingEnvVars((AbstractProject) job, pollingNode); + } catch (EnvInjectException e) { + throw new ScriptTriggerException(e); + } + } else { + envVars = new HashMap<>(); } if (groovyExpression != null) { - boolean evaluationSucceed = executor.evaluateGroovyScript(pollingNode, proj, getGroovyExpression(), envVars, groovySystemScript); + boolean evaluationSucceed = executor.evaluateGroovyScript(pollingNode, job, getGroovyExpression(), envVars, groovySystemScript); if (evaluationSucceed) { return true; } } if (groovyFilePath != null) { - boolean evaluationSucceed = executor.evaluateGroovyScriptFilePath(pollingNode, proj, Util.replaceMacro(groovyFilePath, envVars), envVars, groovySystemScript); + boolean evaluationSucceed = executor.evaluateGroovyScriptFilePath(pollingNode, job, Util.replaceMacro(groovyFilePath, envVars), envVars, groovySystemScript); if (evaluationSucceed) { return true; } @@ -229,8 +235,8 @@ public InternalGroovyScriptTriggerAction(String actionTitle) { } @SuppressWarnings("unused") - public AbstractProject getOwner() { - return (AbstractProject) job; + public BuildableItem getOwner() { + return job; } @Override diff --git a/src/main/java/org/jenkinsci/plugins/scripttrigger/groovy/GroovyScriptTriggerExecutor.java b/src/main/java/org/jenkinsci/plugins/scripttrigger/groovy/GroovyScriptTriggerExecutor.java old mode 100644 new mode 100755 index 84c0776..4aa3833 --- a/src/main/java/org/jenkinsci/plugins/scripttrigger/groovy/GroovyScriptTriggerExecutor.java +++ b/src/main/java/org/jenkinsci/plugins/scripttrigger/groovy/GroovyScriptTriggerExecutor.java @@ -25,14 +25,13 @@ import groovy.lang.GroovyShell; import hudson.PluginManager; import hudson.Util; -import hudson.model.AbstractProject; -import hudson.model.Hudson; -import hudson.model.Node; +import hudson.model.*; import hudson.remoting.Callable; import hudson.util.IOUtils; import org.jenkinsci.lib.xtrigger.XTriggerLog; import org.jenkinsci.plugins.scripttrigger.ScriptTriggerException; import org.jenkinsci.plugins.scripttrigger.ScriptTriggerExecutor; +import org.jenkinsci.remoting.RoleChecker; import java.io.File; import java.io.FileInputStream; @@ -48,7 +47,7 @@ public GroovyScriptTriggerExecutor(XTriggerLog log) { super(log); } - public boolean evaluateGroovyScript(Node executingNode, final AbstractProject proj, final String scriptContent, final Map envVars, boolean groovySystemScript) throws ScriptTriggerException { + public boolean evaluateGroovyScript(Node executingNode, final BuildableItem items, final String scriptContent, final Map envVars, boolean groovySystemScript) throws ScriptTriggerException { if (scriptContent == null) { throw new NullPointerException("The script content object must be set."); @@ -56,10 +55,14 @@ public boolean evaluateGroovyScript(Node executingNode, final AbstractProject pr try { if (groovySystemScript) { log.info("Running as system script"); - return evaluateGroovyScript(proj, scriptContent, envVars); + return evaluateGroovyScript(items, scriptContent, envVars); } return executingNode.getRootPath().act(new Callable() { + @Override + public void checkRoles(RoleChecker roleChecker) throws SecurityException { + } + public Boolean call() throws ScriptTriggerException { log.info("Running as node script"); return evaluateGroovyScript(null, scriptContent, envVars); @@ -80,7 +83,7 @@ public Boolean call() throws ScriptTriggerException { } } - private boolean evaluateGroovyScript(final AbstractProject proj, final String scriptContent, final Map envVars) { + private boolean evaluateGroovyScript(final BuildableItem item, final String scriptContent, final Map envVars) { if (envVars != null) { final StringBuilder envDebug = new StringBuilder("Replacing script vars using:"); for (final Map.Entry envEntry : envVars.entrySet()) { @@ -108,8 +111,8 @@ private boolean evaluateGroovyScript(final AbstractProject proj, final String sc shell.setVariable("log", log); shell.setVariable("out", log.getListener().getLogger()); - if (proj != null) { - shell.setVariable("project", proj); + if (item != null) { + shell.setVariable("project", item); } //Evaluate the new script content @@ -148,7 +151,7 @@ protected ClassLoader getClassLoader() { return cl; } - public boolean evaluateGroovyScriptFilePath(Node executingNode, AbstractProject proj, String scriptFilePath, Map envVars, boolean groovySystemScript) throws ScriptTriggerException { + public boolean evaluateGroovyScriptFilePath(Node executingNode, BuildableItem item, String scriptFilePath, Map envVars, boolean groovySystemScript) throws ScriptTriggerException { if (scriptFilePath == null) { throw new NullPointerException("The scriptFilePath object must be set."); @@ -189,7 +192,7 @@ public boolean evaluateGroovyScriptFilePath(Node executingNode, AbstractProject scriptContent = getStringContent(executingNode, scriptFilePath); } - return evaluateGroovyScript(executingNode, proj, scriptContent, envVars, groovySystemScript); + return evaluateGroovyScript(executingNode, item, scriptContent, envVars, groovySystemScript); } } diff --git a/src/main/resources/index.jelly b/src/main/resources/index.jelly old mode 100644 new mode 100755 index ae14d0d..ddb97cc --- a/src/main/resources/index.jelly +++ b/src/main/resources/index.jelly @@ -1,3 +1,4 @@ +
This plugin makes it possible to poll changes of an environment with a script.
diff --git a/src/main/resources/org/jenkinsci/plugins/scripttrigger/ScriptTrigger/config.jelly b/src/main/resources/org/jenkinsci/plugins/scripttrigger/ScriptTrigger/config.jelly old mode 100644 new mode 100755 index 766cab9..7805f77 --- a/src/main/resources/org/jenkinsci/plugins/scripttrigger/ScriptTrigger/config.jelly +++ b/src/main/resources/org/jenkinsci/plugins/scripttrigger/ScriptTrigger/config.jelly @@ -1,3 +1,4 @@ +