Как утвердить сценарий Jenkins со сценарием RejectedAccessException для файлов groovy.io.FileType? - PullRequest
1 голос
/ 25 марта 2019

У меня есть сценарий Jenkins Pipeline, и я не могу утвердить ограничение песочницы для 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 ...

Ответы [ 2 ]

1 голос
/ 25 марта 2019

Лучший способ работы с конвейерами Jenkins - это следовать предоставленным сценариям. В этом случае просто используйте утилиту findFiles

Кажется, что невозможно найти каталоги, но вы можете найти файлы рекурсивно в подпапках, используя муравьиный шаблон, соответствующий .

Чтобы перебрать все файлы в подпапке вашего рабочего пространства, вы можете написать так:

findFiles(glob: 'special/path/**/*').each {
    echo "${WORKSPACE}/${it.path}"
}
0 голосов
/ 25 марта 2019

Одним из способов решения этой проблемы является использование консоли скриптов Groovy через суб-URL .../script и запуск следующего скрипта:

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