1

私はまだプラグイン開発を学んでいます。これは私の最初のものです。

プラグインの構成を保持したいのですが、うまくいきません。

私が間違っていることを教えてください。

ジョブへのプラグインの追加からジョブ構成の保存まで、プロセスのデバッグを試みました。

ディスクリプタの load() メソッド内に xml ファイルが見つからないことがわかりました。

探しているパスは次のようなものです: c:\users\Peter\workspace\r-script.\work\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 コード投稿での最初のタイマー。

4

1 に答える 1

0

この行をコメントアウトする必要があるかもしれません

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

その後、再び保存されますが、フィールドはありません。

Jenkins プラグインの例を見つけるのに適した場所は、https://github.com/jenkinsciです。

于 2013-10-16T11:19:52.347 に答える