如何批准groovy.io.FileType文件的Jenkins脚本管道拒绝AccessException?

如何批准groovy.io.FileType文件的Jenkins脚本管道拒绝AccessException?,jenkins,groovy,jenkins-pipeline,sandbox,jenkins-groovy,Jenkins,Groovy,Jenkins Pipeline,Sandbox,Jenkins Groovy,我有一个脚本Jenkins管道,无法批准groovy.io.FileType文件的沙箱限制。例如,以下Jenkins管道片段在沙箱即用即用中不起作用: new File("/tmp").eachFileRecurse(FileType.FILES) { file -> echo "$file" } 将引发异常: Exception stacktrace: org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessExce

我有一个脚本Jenkins管道,无法批准
groovy.io.FileType文件的沙箱限制。例如,以下Jenkins管道片段在沙箱即用即用中不起作用:

new File("/tmp").eachFileRecurse(FileType.FILES) { file ->
    echo "$file"
}
将引发异常:

Exception stacktrace: org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use staticField groovy.io.FileType FILES
at org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.StaticWhitelist.rejectStaticField(StaticWhitelist.java:199)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor$14.reject(SandboxInterceptor.java:372)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:381)
at org.kohsuke.groovy.sandbox.impl.Checker$6.call(Checker.java:288)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:292)
at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getProperty(SandboxInvoker.java:29)
at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:20)
at WorkflowScript.copySqlFiles(WorkflowScript:101)
at WorkflowScript.run(WorkflowScript:58)
at org.jenkinsci.plugins.docker.workflow.Docker$Image.inside(jar:file:/var/jenkins_home/plugins/docker-workflow/WEB-INF/lib/docker-workflow.jar!/org/jenkinsci/plugins/docker/workflow/Docker.groovy:136)
...
通常会在中为此类型创建一个条目
Manage Jenkins»过程中脚本批准
,但此例外情况除外。这真的很奇怪,因为如果我用
新文件(“/tmp”).eachFileRecurse(FileType.directories)
遍历目录,它正在工作,我可以批准异常,但是现在没有为
文件生成批准条目
..

一个解决方法是通过子URL
../Script
使用Groovy脚本控制台并运行以下脚本:

def signature = 'staticField groovy.io.FileType FILES'
org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval.get().approveSignature(signature)

使用Jenkins管道的最佳方法是遵循提供的脚本。在这种情况下,只需使用

似乎不可能找到目录,但可以使用在子文件夹中递归查找文件

要迭代工作区子文件夹中的所有文件,可以编写以下代码:

findFiles(glob: 'special/path/**/*').each {
    echo "${WORKSPACE}/${it.path}"
}

非常有趣的链接,但在我看来非常有限的API,我真正做的是两个:新文件(${env.WORKSPACE/special/path}”).eachFileRecurse(FileType.directions){dir->dir.eachFileRecurse(FileType.FILES){File->echo“${File.getAbsolutePath()}}}我如何用FindFile做到这一点?甚至有没有办法将执行限制到目录?如果您只想查找文件,您可以使用我更新的答案来执行此操作,但是使用FindFile步骤似乎不可能仅查找目录