我有一个脚本化的Jenkins管道,无法批准groovy.io.FileType FILES
的沙箱限制。例如,以下Jenkins Pipeline代码段在开箱即用的沙箱中不起作用:
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 » In-process Script Approval
,但针对此例外则不行。这真的很奇怪,因为如果我使用new File("/tmp").eachFileRecurse(FileType.DIRECTORIES)
遍历目录,它可以工作并且可以批准例外,但是现在没有为FILES
生成批准条目...
答案 0 :(得分:1)
与Jenkins Pipelines一起使用的最佳方法是遵循提供的脚本。在这种情况下,只需使用findFiles Utility step
似乎无法找到目录,但是您可以使用ant-like pattern matching在子文件夹中递归查找文件。
要遍历工作空间的子文件夹中的所有文件,您可以这样编写:
findFiles(glob: 'special/path/**/*').each {
echo "${WORKSPACE}/${it.path}"
}
答案 1 :(得分:0)
一种解决方法是通过子URL .../script
使用Groovy脚本控制台并运行以下脚本:
def signature = 'staticField groovy.io.FileType FILES'
org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval.get().approveSignature(signature)