forked from hudson2-plugins/weblogic-deployer-plugin
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[JENKINS-36215] Use of FilePath instead of File
- Loading branch information
rachaumi
committed
Jun 26, 2017
1 parent
d0f8cb4
commit 5aae97f
Showing
1 changed file
with
125 additions
and
102 deletions.
There are no files selected for viewing
227 changes: 125 additions & 102 deletions
227
src/main/java/org/jenkinsci/plugins/deploy/weblogic/FreeStyleJobArtifactSelectorImpl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,102 +1,125 @@ | ||
/** | ||
* | ||
*/ | ||
package org.jenkinsci.plugins.deploy.weblogic; | ||
|
||
import hudson.EnvVars; | ||
import hudson.FilePath; | ||
import hudson.model.AbstractBuild; | ||
import hudson.model.BuildListener; | ||
|
||
import java.io.File; | ||
import java.io.IOException; | ||
import java.util.ArrayList; | ||
import java.util.Collection; | ||
import java.util.List; | ||
import java.util.regex.Pattern; | ||
|
||
import org.apache.commons.collections.CollectionUtils; | ||
import org.apache.commons.io.FileUtils; | ||
import org.apache.commons.lang.StringUtils; | ||
import org.jenkinsci.plugins.deploy.weblogic.util.VarUtils; | ||
|
||
/** | ||
* @author rchaumie | ||
* | ||
*/ | ||
public class FreeStyleJobArtifactSelectorImpl implements ArtifactSelector { | ||
|
||
/* | ||
* (non-Javadoc) | ||
* @see org.jenkinsci.plugins.deploy.weblogic.ArtifactSelector#selectArtifactRecorded(hudson.model.AbstractBuild, hudson.model.BuildListener, java.lang.String, java.lang.String) | ||
*/ | ||
public FilePath selectArtifactRecorded(AbstractBuild<?, ?> build, BuildListener listener, String filteredResource, String baseDirectory) throws IOException, InterruptedException { | ||
|
||
FilePath selectedArtifact = null; | ||
|
||
listener.getLogger().println("[WeblogicDeploymentPlugin] - Retrieving artifacts recorded [filtered resources on "+filteredResource+"]..."); | ||
List<FilePath> artifactsRecorded = new ArrayList<FilePath>(); | ||
|
||
// On parcours le workspace si aucun repertoire de base specifie a la recherche d'un fichier correspondant a l'expression reguliere | ||
Collection<?> filesToCheck = CollectionUtils.EMPTY_COLLECTION; | ||
String baseDirName = ""; | ||
if(StringUtils.isBlank(baseDirectory)){ | ||
FilePath workspace = build.getWorkspace(); | ||
baseDirName = workspace.getName(); | ||
filesToCheck = FileUtils.listFiles(new File(workspace.toURI()), null, true); | ||
} else { | ||
|
||
//Recuperation des variables | ||
EnvVars vars = VarUtils.getEnvVars(build, listener); | ||
String resolvedBaseDirectory = vars.expand(baseDirectory); | ||
|
||
File baseDir = new File(resolvedBaseDirectory); | ||
|
||
//si un repertoire est specifie mais qu'il est inacessible ou invalide on renvoit une erreur | ||
if(! baseDir.exists() || ! baseDir.isDirectory() || ! baseDir.canRead()){ | ||
listener.getLogger().println("[WeblogicDeploymentPlugin] - the base directory specified ["+resolvedBaseDirectory+"] is invalid (doesn't exists or is not a directory or has insufficient privilege). Please check the job configuration"); | ||
throw new RuntimeException("The base directory specified ["+resolvedBaseDirectory+"] is invalid (doesn't exists or is not a directory or has insufficient privilege)"); | ||
} | ||
|
||
baseDirName = baseDir.getName(); | ||
filesToCheck = FileUtils.listFiles(baseDir, null, true); | ||
} | ||
|
||
listener.getLogger().println("[WeblogicDeploymentPlugin] - "+filesToCheck.size() +" files found under "+baseDirName); | ||
for(File file : (Collection<File>) filesToCheck){ | ||
if(! file.isDirectory() && Pattern.matches(filteredResource, file.getName())){ | ||
listener.getLogger().println("[WeblogicDeploymentPlugin] - the following resource recorded "+file.getAbsolutePath()+" is eligible."); | ||
artifactsRecorded.add(new FilePath(file)); | ||
} else { | ||
listener.getLogger().println("[WeblogicDeploymentPlugin] - the following resource ['"+file.getName()+"'] doesn't match "+filteredResource); | ||
} | ||
} | ||
|
||
if(artifactsRecorded.size() < 1){ | ||
throw new RuntimeException("No artifact to deploy ["+filteredResource+"] found."); | ||
} | ||
|
||
if(artifactsRecorded.size() > 1){ | ||
listener.getLogger().println("[WeblogicDeploymentPlugin] - More than 1 artifact found : The first one "+artifactsRecorded.get(0)+ " will be deployed!!!"); | ||
} | ||
|
||
selectedArtifact = artifactsRecorded.get(0); | ||
|
||
|
||
|
||
// Erreur si l'artifact n'existe pas | ||
if(selectedArtifact == null){ | ||
throw new RuntimeException("No artifact to deploy found."); | ||
} | ||
return selectedArtifact; | ||
} | ||
|
||
/* | ||
* (non-Javadoc) | ||
* @see org.jenkinsci.plugins.deploy.weblogic.ArtifactSelector#getName() | ||
*/ | ||
public String getName() { | ||
return "FreeStyleProject"; | ||
} | ||
|
||
} | ||
/** | ||
* | ||
*/ | ||
package org.jenkinsci.plugins.deploy.weblogic; | ||
|
||
import hudson.EnvVars; | ||
import hudson.FilePath; | ||
import hudson.FilePath.FileCallable; | ||
import hudson.model.AbstractBuild; | ||
import hudson.model.BuildListener; | ||
import hudson.remoting.VirtualChannel; | ||
|
||
import java.io.File; | ||
import java.io.IOException; | ||
import java.util.ArrayList; | ||
import java.util.Collection; | ||
import java.util.List; | ||
import java.util.regex.Pattern; | ||
|
||
import org.apache.commons.io.FileUtils; | ||
import org.apache.commons.lang.StringUtils; | ||
import org.jenkinsci.plugins.deploy.weblogic.util.VarUtils; | ||
import org.jenkinsci.remoting.RoleChecker; | ||
|
||
import com.google.common.collect.Lists; | ||
|
||
/** | ||
* @author rchaumie | ||
* | ||
*/ | ||
public class FreeStyleJobArtifactSelectorImpl implements ArtifactSelector { | ||
|
||
/* | ||
* (non-Javadoc) | ||
* @see org.jenkinsci.plugins.deploy.weblogic.ArtifactSelector#selectArtifactRecorded(hudson.model.AbstractBuild, hudson.model.BuildListener, java.lang.String, java.lang.String) | ||
*/ | ||
public FilePath selectArtifactRecorded(AbstractBuild<?, ?> build, BuildListener listener, String filteredResource, String baseDirectory) throws IOException, InterruptedException { | ||
|
||
FilePath selectedArtifact = null; | ||
|
||
listener.getLogger().println("[WeblogicDeploymentPlugin] - Retrieving artifacts recorded [filtered resources on "+filteredResource+"]..."); | ||
List<FilePath> artifactsRecorded = new ArrayList<FilePath>(); | ||
|
||
// On parcours le workspace si aucun repertoire de base specifie a la recherche d'un fichier correspondant a l'expression reguliere | ||
List<FilePath> filesToCheck = Lists.newArrayList(); | ||
FilePath baseDir = null; | ||
if(StringUtils.isBlank(baseDirectory)){ | ||
baseDir = build.getWorkspace(); | ||
listener.getLogger().println("[WeblogicDeploymentPlugin] - No the base directory set. Looking up for workspace directory located on '"+baseDir+"'..."); | ||
} else { | ||
|
||
//Recuperation des variables | ||
EnvVars vars = VarUtils.getEnvVars(build, listener); | ||
String resolvedBaseDirectory = vars.expand(baseDirectory); | ||
|
||
baseDir = new FilePath(build.getBuiltOn().getChannel(), resolvedBaseDirectory); | ||
|
||
//si un repertoire est specifie mais qu'il est inacessible ou invalide on renvoit une erreur | ||
if(! baseDir.exists() || ! baseDir.isDirectory() || ! baseDir.toVirtualFile().canRead()){ | ||
listener.getLogger().println("[WeblogicDeploymentPlugin] - the following base directory '"+resolvedBaseDirectory+"' is invalid on node '"+build.getBuiltOnStr()+"' (doesn't exist or is not a directory or has insufficient privilege). Please check the job configuration"); | ||
throw new RuntimeException("The base directory '"+resolvedBaseDirectory+"' is invalid on node '"+build.getBuiltOnStr()+"' (doesn't exist or is not a directory or has insufficient privilege)"); | ||
} | ||
} | ||
|
||
// lookup files found | ||
filesToCheck = baseDir.act(new RecursiveWorkspaceLookup()); | ||
|
||
listener.getLogger().println("[WeblogicDeploymentPlugin] - "+filesToCheck.size() +" files found under directory "+baseDir.getRemote()); | ||
// TODO : Pourquoi ne pas l'incorporer au list(...) directement ? | ||
for(FilePath file : filesToCheck){ | ||
if(! file.isDirectory() && Pattern.matches(filteredResource, file.getName())){ | ||
listener.getLogger().println("[WeblogicDeploymentPlugin] - the following resource recorded "+file+" is eligible."); | ||
artifactsRecorded.add(file); | ||
} else { | ||
listener.getLogger().println("[WeblogicDeploymentPlugin] - the following resource ['"+file.getRemote()+"'] doesn't match "+filteredResource); | ||
} | ||
} | ||
|
||
if(artifactsRecorded.size() < 1){ | ||
throw new RuntimeException("No artifact to deploy ["+filteredResource+"] found."); | ||
} | ||
|
||
if(artifactsRecorded.size() > 1){ | ||
listener.getLogger().println("[WeblogicDeploymentPlugin] - More than 1 artifact found : The first one "+artifactsRecorded.get(0)+ " will be deployed!!!"); | ||
} | ||
|
||
selectedArtifact = artifactsRecorded.get(0); | ||
|
||
|
||
|
||
// Erreur si l'artifact n'existe pas | ||
if(selectedArtifact == null){ | ||
throw new RuntimeException("No artifact to deploy found."); | ||
} | ||
return selectedArtifact; | ||
} | ||
|
||
/* | ||
* (non-Javadoc) | ||
* @see org.jenkinsci.plugins.deploy.weblogic.ArtifactSelector#getName() | ||
*/ | ||
public String getName() { | ||
return "FreeStyleProject"; | ||
} | ||
|
||
private static class RecursiveWorkspaceLookup implements FileCallable<List<FilePath>> { | ||
private static final long serialVersionUID = 1L; | ||
|
||
@Override | ||
public void checkRoles(RoleChecker checker) throws SecurityException { | ||
} | ||
|
||
@Override | ||
public List<FilePath> invoke(File f, VirtualChannel channel) throws IOException, InterruptedException { | ||
List<FilePath> result = Lists.newArrayList(); | ||
Collection<File> files = FileUtils.listFiles(f, null, true); | ||
for(File file : files){ | ||
result.add(new FilePath(file)); | ||
} | ||
return result; | ||
} | ||
|
||
} | ||
|
||
} |