diff --git a/job-dsl-core/src/main/groovy/javaposse/jobdsl/dsl/AbstractJobManagement.java b/job-dsl-core/src/main/groovy/javaposse/jobdsl/dsl/AbstractJobManagement.java index 5f9d82c70..51b3096d0 100644 --- a/job-dsl-core/src/main/groovy/javaposse/jobdsl/dsl/AbstractJobManagement.java +++ b/job-dsl-core/src/main/groovy/javaposse/jobdsl/dsl/AbstractJobManagement.java @@ -2,6 +2,8 @@ import com.google.common.collect.Maps; +import java.io.IOException; +import java.io.InputStream; import java.io.PrintStream; import java.util.Map; @@ -37,6 +39,16 @@ public void queueJob(String jobName) throws JobNameNotProvidedException { validateJobNameArg(jobName); } + @Override + public InputStream streamFileInWorkspace(String filePath) throws IOException { + throw new UnsupportedOperationException(); + } + + @Override + public String readFileInWorkspace(String filePath) throws IOException { + throw new UnsupportedOperationException(); + } + protected void validateUpdateArgs(String jobName, String config) { validateJobNameArg(jobName); validateConfigArg(config); diff --git a/job-dsl-core/src/main/groovy/javaposse/jobdsl/dsl/FileJobManagement.groovy b/job-dsl-core/src/main/groovy/javaposse/jobdsl/dsl/FileJobManagement.groovy index 31cd09742..c09abfc5c 100644 --- a/job-dsl-core/src/main/groovy/javaposse/jobdsl/dsl/FileJobManagement.groovy +++ b/job-dsl-core/src/main/groovy/javaposse/jobdsl/dsl/FileJobManagement.groovy @@ -42,5 +42,15 @@ class FileJobManagement extends AbstractJobManagement { new File(jobName + ext).write(config) return true } + + @Override + public InputStream streamFileInWorkspace(String filePath) { + return new FileInputStream(new File(root, filePath)); + } + + @Override + public String readFileInWorkspace(String filePath) { + new File(root, filePath).text + } } diff --git a/job-dsl-core/src/main/groovy/javaposse/jobdsl/dsl/JobManagement.groovy b/job-dsl-core/src/main/groovy/javaposse/jobdsl/dsl/JobManagement.groovy index 80ee09afe..b19650b63 100644 --- a/job-dsl-core/src/main/groovy/javaposse/jobdsl/dsl/JobManagement.groovy +++ b/job-dsl-core/src/main/groovy/javaposse/jobdsl/dsl/JobManagement.groovy @@ -31,6 +31,9 @@ public interface JobManagement { */ void queueJob(String jobName) throws JobNameNotProvidedException; + InputStream streamFileInWorkspace(String filePath) throws IOException; + String readFileInWorkspace(String filePath) throws IOException; + /** * Stream to write to, for stdout. * @return PrintWriter diff --git a/job-dsl-core/src/test/groovy/javaposse/jobdsl/dsl/StringJobManagement.groovy b/job-dsl-core/src/test/groovy/javaposse/jobdsl/dsl/StringJobManagement.groovy index bfdeaa883..8a9e69b1f 100644 --- a/job-dsl-core/src/test/groovy/javaposse/jobdsl/dsl/StringJobManagement.groovy +++ b/job-dsl-core/src/test/groovy/javaposse/jobdsl/dsl/StringJobManagement.groovy @@ -15,6 +15,7 @@ public class StringJobManagement extends AbstractJobManagement { Map availableConfigs = [:] Map savedConfigs = [:] + Map availableFiles = [:] Map params = [:] List jobScheduled = [] @@ -65,5 +66,18 @@ public class StringJobManagement extends AbstractJobManagement { void queueJob(String jobName) throws JobNameNotProvidedException { jobScheduled << jobName } + + + @Override + public InputStream streamFileInWorkspace(String filePath) { + String body = availableFiles.get(filePath) + return new InputStreamReader(new StringReader(body)); + } + + @Override + public String readFileInWorkspace(String filePath) { + String body = availableFiles.get(filePath) + return body + } } diff --git a/job-dsl-plugin/src/main/groovy/javaposse/jobdsl/plugin/ExecuteDslScripts.java b/job-dsl-plugin/src/main/groovy/javaposse/jobdsl/plugin/ExecuteDslScripts.java index 28fa2d796..396db4ded 100644 --- a/job-dsl-plugin/src/main/groovy/javaposse/jobdsl/plugin/ExecuteDslScripts.java +++ b/job-dsl-plugin/src/main/groovy/javaposse/jobdsl/plugin/ExecuteDslScripts.java @@ -140,7 +140,7 @@ public boolean perform(final AbstractBuild build, final Launcher launcher, env.putAll(build.getBuildVariables()); // We run the DSL, it'll need some way of grabbing a template config.xml and how to save it - JenkinsJobManagement jm = new JenkinsJobManagement(listener.getLogger(), env); + JenkinsJobManagement jm = new JenkinsJobManagement(listener.getLogger(), env, build); Set freshJobs; String jobName = build.getProject().getName(); diff --git a/job-dsl-plugin/src/main/groovy/javaposse/jobdsl/plugin/JenkinsJobManagement.java b/job-dsl-plugin/src/main/groovy/javaposse/jobdsl/plugin/JenkinsJobManagement.java index 7e3438b2a..00e5b8bfa 100644 --- a/job-dsl-plugin/src/main/groovy/javaposse/jobdsl/plugin/JenkinsJobManagement.java +++ b/job-dsl-plugin/src/main/groovy/javaposse/jobdsl/plugin/JenkinsJobManagement.java @@ -5,6 +5,7 @@ import com.google.common.collect.Collections2; import com.google.common.collect.Sets; import hudson.EnvVars; +import hudson.FilePath; import hudson.XmlFile; import hudson.model.*; import javaposse.jobdsl.dsl.*; @@ -29,6 +30,7 @@ public final class JenkinsJobManagement extends AbstractJobManagement { Jenkins jenkins = Jenkins.getInstance(); EnvVars envVars; Set modifiedJobs; + AbstractBuild build; JenkinsJobManagement() { super(); @@ -36,10 +38,11 @@ public final class JenkinsJobManagement extends AbstractJobManagement { modifiedJobs = Sets.newHashSet(); } - public JenkinsJobManagement(PrintStream outputLogger, EnvVars envVars) { + public JenkinsJobManagement(PrintStream outputLogger, EnvVars envVars, AbstractBuild build) { super(outputLogger); this.envVars = envVars; - modifiedJobs = Sets.newHashSet(); + this.modifiedJobs = Sets.newHashSet(); + this.build = build; } @Override @@ -96,7 +99,6 @@ public void queueJob(String jobName) throws JobNameNotProvidedException { AbstractProject project = (AbstractProject) jenkins.getItemByFullName(jobName); - Object build = ((Executor) Thread.currentThread()).getCurrentExecutable(); if(build != null && build instanceof Run) { Run run = (Run) build; LOGGER.log(Level.INFO, String.format("Scheduling build of %s from %s", jobName, run.getParent().getName())); @@ -108,6 +110,30 @@ public void queueJob(String jobName) throws JobNameNotProvidedException { } + @Override + public InputStream streamFileInWorkspace(String relLocation) throws IOException { + FilePath filePath = locateValidFileInWorkspace(relLocation); + return filePath.read(); + } + + @Override + public String readFileInWorkspace(String relLocation) throws IOException { + FilePath filePath = locateValidFileInWorkspace(relLocation); + return filePath.readToString(); + } + + private FilePath locateValidFileInWorkspace(String relLocation) throws IOException { + FilePath filePath = build.getWorkspace().child(relLocation); + try { + if (!filePath.exists()) { + throw new IllegalStateException("File does not exists"); + } + } catch(InterruptedException ie) { + throw new RuntimeException(ie); + } + return filePath; + } + private String lookupJob(String jobName) throws IOException { LOGGER.log(Level.FINE, String.format("Looking up Job %s", jobName)); String jobXml = "";