Ce que j'essaie de réaliser est de créer un fichier temporaire dans groovy dans le répertoire d'espace de travail, mais à titre d'exemple /tmp/foo
sera assez bon.Comment utiliser createTempFile dans groovy/Jenkins pour créer un fichier dans un répertoire autre que celui par défaut?
Donc, ici fonctionne parfaitement code java:
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.Files;
class foo {
public static void main(String[] args) {
try {
String s="/tmp/foo";
Path p=Paths.get(s);
Path tmp=Files.createTempFile(p,"pref",".suf");
System.out.println(tmp.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
Cependant, lorsqu'il est utilisé dans le contexte de pipeline Jenkins, il ne fonctionne tout simplement pas:
def mktemp() {
//String s=pwd(tmp:true)
String s="/tmp/foo"
Path p=Paths.get(s)
Path tmp=Files.createTempFile(p,"pref",".suf")
return tmp;
}
Le résultat est incompatibilité de type d'élément de tableau message avec rien d'utile dans le journal de pipeline:
java.lang.IllegalArgumentException: array element type mismatch
at java.lang.reflect.Array.set(Native Method)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovyCallSiteSelector.parametersForVarargs(GroovyCallSiteSelector.java:104)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovyCallSiteSelector.matches(GroovyCallSiteSelector.java:51)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovyCallSiteSelector.findMatchingMethod(GroovyCallSiteSelector.java:197)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovyCallSiteSelector.staticMethod(GroovyCallSiteSelector.java:191)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onStaticCall(SandboxInterceptor.java:153)
at org.kohsuke.groovy.sandbox.impl.Checker$2.call(Checker.java:184)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedStaticCall(Checker.java:188)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:95)
at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)
at WorkflowScript.mktemp(WorkflowScript:16)
Le fichier java.io.File.createTempFile() n'est pas meilleur. En code java simple, cela fonctionne parfaitement. Dans groovy il jette java.io.IOException: No such file or directory
.
BTW, /tmp/foo
existe, les méthodes sont ajoutées sur l'écran d'approbation de script.
problème pas dans groovy, mais dans sandbox jenkins. pouvez-vous l'exécuter pas dans le bac à sable? – daggett