私が達成しようとしているのは、ワークスペースディレクトリのgroovyに一時ファイルを作成することですが、例として/tmp/foo
で十分です。ジェンキンスパイプラインのコンテキストで使用する場合、それは単に動作しません、しかしgroovy/JenkinsでcreateTempFileを使ってデフォルト以外のディレクトリにファイルを作成するには?
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();
}
}
}
:
だから、ここ完全にJavaコードを働いている
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コードでは完全に動作します。グルーヴィーではjava.io.IOException: No such file or directory
を投げます。
BTW、/tmp/foo
ディレクトリが存在する場合は、スクリプトの承認画面にメソッドが追加されます。
groovyではなく、jenkinsサンドボックスでの問題です。あなたはサンドボックスで実行できませんか? – daggett