如何在groovy/Jenkins中使用createTempFile在非默认目录中创建文件?

如何在groovy/Jenkins中使用createTempFile在非默认目录中创建文件?,groovy,jenkins-pipeline,temporary-files,Groovy,Jenkins Pipeline,Temporary Files,我试图实现的是在groovy中的workspace目录中创建一个临时文件,但是作为一个例子,/tmp/foo就足够了 因此,这里有一段完美运行的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 { Str

我试图实现的是在groovy中的workspace目录中创建一个临时文件,但是作为一个例子,
/tmp/foo
就足够了

因此,这里有一段完美运行的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();
        }
    }
}
但是,在Jenkins管道中使用时,它根本不起作用:

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;
}
结果是数组元素类型不匹配消息,在管道日志中没有任何帮助:

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)
java.io.File.createTempFile()并没有任何改进。在普通java代码中,它可以完美地工作。在groovy中,它抛出
java.io.IOException:没有这样的文件或目录


顺便说一句,存在
/tmp/foo
目录,在脚本批准屏幕上添加了方法

IOException
我怀疑您正在从
节点{}
块中调用
mktemp
,并希望在该节点上创建临时文件。管道脚本完全在Jenkins主机上运行。与文件系统交互的管道步骤(例如,
writeFile
)知道
节点{}
块,并将发送到要在那里执行的节点,但是,任何纯Java方法都不知道远程节点,它们将与主文件系统交互。

IOException
我怀疑您是在
节点{}
块中调用
mktemp
,并期望在该节点上创建临时文件。管道脚本完全在Jenkins主机上运行。与文件系统交互的管道步骤(例如,
writeFile
)知道
node{}
块,并将被发送到要在那里执行的节点,但是任何纯Java方法都不知道远程节点,将与主文件系统交互。

问题不在groovy中,而是在jenkins sandbox中。你们能不能不在沙箱中运行它?问题不在groovy中,而是在jenkins沙箱中。你能不在沙箱里运行它吗?