2013-10-16 3 views
1

저는 플러그인 개발자를 배우고 있습니다. 이것은 나의 첫 번째 것입니다.Jenkins 플러그인 개발 - 지속성

내 플러그인 구성을 유지하고 싶지만 작동하지 않습니다.

말씀해 주시겠습니까, 내가 뭘 잘못하고있는 걸까요?

작업 구성을 저장하기 위해 플러그인을 추가하는 것으로 시작하여 프로세스 디버깅을 시도했습니다.

설명자의 load() 메소드에서 xml 파일을 찾을 수 없습니다. C는 :.. \ 사용자 \ 베드로는 \ 작업 공간 \ r에 스크립트 \ 작업 \ whatEverDir는 \ xy.xml

내가 생각하지 않는 \ 부분은

이 찾고있는 경로는 같은가 구성 파일을 찾을 수 없지만이 경로를 생성하는 Jenkins 클래스이므로이 파일에 내기를 걸지는 않습니다. 시스템이 처음에는 여기에서 만들려고했지만.

미리 감사드립니다.

Scriptrunner.jelly

<f:block> 
     <f:entry title="RScript" field="command"> 
      <f:textarea style="width:99%" /> 
     </f:entry> 
     </f:block> 

    <f:entry field="installedPackages" title="Installed packages"> 
     <f:select style="width:40%" /> 
    </f:entry> 

    <f:entry field="mirrors" title="Choose a mirror"> 
     <f:select style="width:40%" /> 
    </f:entry> 

    <f:entry> 
      <f:repeatableProperty field="availablePackages" minimum="1"/> 
    </f:entry>    

AvailablePackage.jelly

<f:entry field="availablePackages"> 
    <f:select style="width:40%" /> 
    <f:repeatableDeleteButton /> 
</f:entry> 

,

ScriptRunner.java

public class ScriptRunner extends Builder { 
private static final String fileExtension = ".R"; 
private ArrayList<AvailablePackage> availablePackages; 
private String command; 
private String chosenMirror; 
private List<String> mirrorList = new ArrayList<String>(); 

@DataBoundConstructor 
public ScriptRunner(String command, ArrayList<String> installedPackages,  ArrayList<String> mirrors, ArrayList<AvailablePackage> availablePackages) { 
this.chosenMirror = mirrors.get(0); 
this.availablePackages = availablePackages; 
this.command = command; 
    } 

    public final String getCommand() { 
    return command; 
    } 

    @Override 
    public boolean perform(AbstractBuild<?, ?> build, Launcher launcher, 
    BuildListener listener) throws InterruptedException { 
    return perform(build, launcher, (TaskListener) listener); 
    } 

    public boolean perform(AbstractBuild<?, ?> build, Launcher launcher, 
    TaskListener listener) throws InterruptedException { 
FilePath workSpace = build.getWorkspace(); 
FilePath rScript = null; 
if (workSpace == null) { 
    try { 
    throw new NoSuchFileException("Workspace could not be set!"); 
    } catch (NoSuchFileException e) { 
    e.printStackTrace(); 
    } 
} 
try { 
    try { 
    String fullScript; 
    if (command.contains("options(repos=structure(")) { 
      fullScript = PackagesManager.singleton().createFullScript(availablePackages, "", command); 
    } else { 
     fullScript = PackagesManager.singleton().createFullScript(availablePackages, chosenMirror, command); 
    } 
    rScript = workSpace.createTextTempFile("RScriptTemp", 
     getFileExtension(), fullScript, false); 
    } catch (IOException e) { 
    Util.displayIOException(e, listener); 
    e.printStackTrace(listener.fatalError(Messages 
     .CommandInterpreter_UnableToProduceScript())); 
    return false; 
    } 

    boolean successfullyRan = false; 
    try { 
    EnvVars envVars = build.getEnvironment(listener); 
    for (Map.Entry<String, String> e : build.getBuildVariables() 
     .entrySet()) { 
     envVars.put(e.getKey(), e.getValue()); 
    } 

    if (launcher.launch().cmds(buildCommandLine(rScript)) 
     .envs(envVars).stdout(listener).pwd(workSpace).join() == 1) { 
     successfullyRan = true; 
    } 
    } catch (IOException e) { 
    Util.displayIOException(e, listener); 
    e.printStackTrace(listener.fatalError(Messages 
     .CommandInterpreter_CommandFailed())); 

    } 
    return successfullyRan; 
} finally { 
    try { 
    if (rScript != null) { 
     rScript.delete(); 
    } 
    } catch (IOException e) { 
    Util.displayIOException(e, listener); 
    e.printStackTrace(listener.fatalError(Messages 
     .CommandInterpreter_UnableToDelete(rScript))); 
    } catch (Exception e) { 
    e.printStackTrace(listener.fatalError(Messages 
     .CommandInterpreter_UnableToDelete(rScript))); 
    } 
} 
} 

public String[] buildCommandLine(FilePath script) { 
return new String[] { "Rscript", script.getRemote() }; 
} 

protected String getFileExtension() { 
return fileExtension; 
} 

public List<String> getMirrorList() { 
return mirrorList; 
} 

public void setMirrorList(List<String> mirrorList) { 
this.mirrorList = mirrorList; 
} 

public String getChosenMirror() { 
return chosenMirror; 
} 

public void setChosenMirror(String chosenMirror) { 
this.chosenMirror = chosenMirror; 
} 

public ArrayList<AvailablePackage> getAvailablePackages() { 
return availablePackages; 
} 

@Override 
public ScriptBuildStepDescriptorImplementation getDescriptor() { 
    return (ScriptBuildStepDescriptorImplementation)super.getDescriptor(); 
} 

@Extension 
public static class ScriptBuildStepDescriptorImplementation extends 
    BuildStepDescriptor<Builder> { 

private boolean showInstalled; 
private String command; 
private String chosenMirror; 
private ArrayList<AvailablePackage> availablePackages; 

public ScriptBuildStepDescriptorImplementation() { 
    load(); 
} 

@Override 
    public boolean configure(StaplerRequest req, JSONObject formData) throws FormException { 
     req.bindJSON(this, formData); 
     save(); 
     return super.configure(req,formData); 
    } 

@Override 
public String getDisplayName() { 
    return "Advanced R script runner"; 
} 

@Override 
public boolean isApplicable(Class<? extends AbstractProject> jobType) { 
    return true; 
} 

public ListBoxModel doFillInstalledPackagesItems() { 
    ListBoxModel mirrors = new ListBoxModel(); 
    Set<String> mirrorsList = PackagesManager.singleton() 
     .getInstalledPackages(); 
    for (String entry : mirrorsList) { 
    mirrors.add(entry); 
    } 
    return mirrors; 
} 

public ListBoxModel doFillAvailablePackagesItems() { 
    ListBoxModel packages = new ListBoxModel(); 
    List<String> packageList = PackagesManager.singleton().getAvailablePackages(); 
    Set<String> alreadyInstalled = PackagesManager.singleton().getInstalledPackages(); 
    for (String entry : packageList) { 
    if (!alreadyInstalled.contains(entry)) { 
    packages.add(entry); 
    } 
    } 
    return packages; 
} 

public ListBoxModel doFillMirrorsItems() { 
    ListBoxModel mirrors = new ListBoxModel(); 
    String[] mirrorsList = MirrorManager.singleton().getMirrors(); 
    int selected = 34; 
    for (int i = 0; i < mirrorsList.length; i++) { 
    String[] splitCurrent = mirrorsList[i].split(" - "); 
    if (chosenMirror != null && chosenMirror.equals(splitCurrent[1])) { 
     selected = i; 
    } 
    mirrors.add(splitCurrent[1], splitCurrent[0]); 
    } 
    mirrors.get(selected).selected = true; 
    return mirrors; 
} 

public boolean getShowInstalled() { 
    return showInstalled; 
} 

public void setShowInstalled(boolean showInstalled) { 
    this.showInstalled = showInstalled; 
} 

public String getCommand() { 
    return command; 
} 

public void setCommand(String command) { 
    this.command = command; 
} 

public String getChosenMirror() { 
    return chosenMirror; 
} 

    public void setChosenMirror(String chosenMirror) { 
    this.chosenMirror = chosenMirror; 
    } 
    } 
} 

AvailablePackage.java

public class AvailablePackage extends AbstractDescribableImpl<AvailablePackage> { 
private String name; 

@DataBoundConstructor 
public AvailablePackage(String availablePackages) { 
this.name = availablePackages; 
} 

public String getName() { 
return name; 
} 

@Override 
public DescriptorImpl getDescriptor() { 
    return (DescriptorImpl)super.getDescriptor(); 
} 

@Extension 
public static class DescriptorImpl extends Descriptor<AvailablePackage> { 
private String name; 

public DescriptorImpl() { 
    load(); 
} 

@Override 
public boolean configure(StaplerRequest req, JSONObject formData) throws FormException { 
    req.bindJSON(this, formData); 
    save(); 
    return super.configure(req,formData); 
    } 

    public ListBoxModel doFillAvailablePackagesItems() { 
     return PackagesManager.singleton().getAvailablePackagesAsListBoxModel(name); 
    } 

    @Override 
    public String getDisplayName() { 
     return ""; 
    } 

    public String getName() { 
     return name; 
    } 
} 

} 

코드 서식 죄송합니다! stackoverflow 코드 게시시 첫 번째 타이머입니다.

답변

0

나는 그것을 다시하지만 필드에 저장됩니다 당신이

@Override 
public boolean configure(StaplerRequest req, JSONObject formData) throws FormException { 
    req.bindJSON(this, formData); 
    save(); 
    //return super.configure(req,formData); 
    return true; 
} 

에서이 줄을 주석 처리해야 할 수 있습니다 생각합니다. 젠킨스 플러그인 예제를 찾을 수

좋은 장소는 https://github.com/jenkinsci

+0

이 도움이되지 않았다입니다. 그 링크를 확인해 보겠습니다. 감사! – inferno88