在groovy中如何在退出时删除临时文件夹?
我正在寻找一种解决方案,当我的(Jenkins)Groovy脚本结束时,该解决方案将递归删除使用在groovy中如何在退出时删除临时文件夹?,groovy,Groovy,我正在寻找一种解决方案,当我的(Jenkins)Groovy脚本结束时,该解决方案将递归删除使用Files.createTempDirectory()创建的文件夹 如果您阅读了文档createTempDirectory()并没有删除文件夹,并且即使您尝试在退出时使用delete-on-exit,如果文件夹中有其他文件,它也会失败 请注意,我正在寻找一种不必在Groovy脚本末尾添加额外代码或添加try/catch方法的解决方案。这是因为这些Groovy代码是从多个可重用的部分编译而来的 工作解决
Files.createTempDirectory()
创建的文件夹
如果您阅读了文档createTempDirectory()并没有删除文件夹,并且即使您尝试在退出时使用delete-on-exit,如果文件夹中有其他文件,它也会失败
请注意,我正在寻找一种不必在Groovy脚本末尾添加额外代码或添加try/catch方法的解决方案。这是因为这些Groovy代码是从多个可重用的部分编译而来的
工作解决方案不需要在脚本末尾添加额外的代码,可能需要使用挂钩机制来注册目录删除操作
import java.nio.file.Files
x = Files.createTempDirectory()
// <-- add some magic hook to tell to remove 'x' folder recursively on exit
// a lot of code I cannot touch
导入java.nio.file.Files
x=Files.createTempDirectory()
//下面呢
def result = x.deleteDir()
assert result
下面呢
def result = x.deleteDir()
assert result
下面的代码将在退出时递归地从临时目录中删除所有文件和文件夹
mydir = Files.createTempDirectory()
addShutdownHook {
mydir.deleteDir()
}
此代码适用于常规Groovy执行,但在基于Jenkins Grooby的管道上失败,因为:
an exception which occurred:
in field delegate
in field closures
in object org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@782f5796
Caused: java.io.NotSerializableException: sun.nio.fs.UnixPath
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860)
因此,我仍在致力于解决“CPS”方面的问题,第一次尝试失败时出现了相同的错误:
@NonCPS
def mkdtemp(String s) {
mydir = Files.createTempDirectory("cp-")
addShutdownHook {
mydir.deleteDir()
println "cleaned"
}
mydir.toString()
}
node {
mkdtemp('xxx')
}
下面的代码将在退出时递归地从临时目录中删除所有文件和文件夹
mydir = Files.createTempDirectory()
addShutdownHook {
mydir.deleteDir()
}
此代码适用于常规Groovy执行,但在基于Jenkins Grooby的管道上失败,因为:
an exception which occurred:
in field delegate
in field closures
in object org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@782f5796
Caused: java.io.NotSerializableException: sun.nio.fs.UnixPath
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860)
因此,我仍在致力于解决“CPS”方面的问题,第一次尝试失败时出现了相同的错误:
@NonCPS
def mkdtemp(String s) {
mydir = Files.createTempDirectory("cp-")
addShutdownHook {
mydir.deleteDir()
println "cleaned"
}
mydir.toString()
}
node {
mkdtemp('xxx')
}
最后
怎么样
def tmp = Files.createTempDirectory()
try {
// do something with tmp
}
finally {
tmp.toFile().deleteDir()
}
最后怎么样
def tmp = Files.createTempDirectory()
try {
// do something with tmp
}
finally {
tmp.toFile().deleteDir()
}