Я использую Jenkins 2 для компиляции проектов Java, я хочу прочитать версию из pom.xml, я следовал этому примеру:
https://github.com/jenkinsci/pipeline-plugin/blob/master/TUTORIAL.md
Пример предлагает:
Кажется, что существует некоторая проблема с безопасностью доступа к файловой системе, но я не могу понять, что это дает (или почему) эту проблему:
Я просто делаю немного иначе, чем в примере:
def version() {
String path = pwd();
def matcher = readFile("${path}/pom.xml") =~ '<version>(.+)</version>'
return matcher ? matcher[0][1] : null
}
Ошибка, которую я получаю при запуске метода версии:
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use method groovy.lang.GroovyObject invokeMethod java.lang.String java.lang.Object (org.codehaus.groovy.runtime.GStringImpl call org.codehaus.groovy.runtime.GStringImpl)
at org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.StaticWhitelist.rejectMethod(StaticWhitelist.java:165)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:117)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:103)
at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:149)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:146)
at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:15)
at WorkflowScript.run(WorkflowScript:71)
at ___cps.transform___(Native Method)
at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:55)
at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:106)
at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:79)
at sun.reflect.GeneratedMethodAccessor408.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:100)
at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:79)
at sun.reflect.GeneratedMethodAccessor408.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:57)
at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:106)
at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:79)
at sun.reflect.GeneratedMethodAccessor408.invoke(Unknown Source)
Я использую эти версии: Plugin Pipeline 2.1 Jenkins 2.2
maven
jenkins
continuous-integration
jenkins-pipeline
Даниэль Эрнандес
источник
источник
Scripts not permitted to use method
, но это произошло потому, что я написалscm 'checkout'
вместоcheckou scm
. На всякий случай, если кто-то попадется, следите за синтаксисом :). Выполнение того, что сказал Маартен Кифт, позволило мне увидеть более четкое сообщение об ошибке о неправильной команде :)Ответы:
Быстрая починка
У меня была аналогичная проблема, и я решил ее, выполнив следующие действия
Альтернатива 1: отключить песочницу
Как подробно объясняется в этой статье , скрипты Groovy по умолчанию запускаются в режиме песочницы. Это означает, что подмножество Groovy-методов может выполняться без одобрения администратора. Также можно запускать сценарии не в режиме песочницы, что означает, что весь сценарий должен быть одобрен администратором сразу. Это мешает пользователям одновременно утверждать каждую строку.
Запуск сценариев без песочницы можно выполнить, сняв этот флажок в конфигурации проекта чуть ниже сценария:
Альтернатива 2: отключить безопасность сценариев
Как объясняется в этой статье, также можно полностью отключить безопасность сценариев. Сначала установите разрешающий плагин безопасности сценария, а после этого измените файл jenkins.xml и добавьте этот аргумент:
Итак, jenkins.xml будет выглядеть примерно так:
Убедитесь, что вы знаете, что делаете, если реализуете это!
источник
@NonCPS
дляMatcher
использования будет достаточно. В этом случае нет необходимости отключать безопасность для всего конвейера, и особенно для всей установки Jenkins. Оцените каждый заблокированный вызов индивидуально и решите, действительно ли вам нужно их одобрять.@NonCPS
не помогает.Matcher
себя, потомуMatcher
что не реализуетSerializable
интерфейс. Возможно, стоит задать новый вопрос. Я хочу, чтобы документация, указанная в исходном вопросе, была сохранена и не была неправильной с самого начала.NonCPS
функцией, которая используетcurrentBuild.rawBuild.getCause(Cause.UserIdCause).getUserId()
. Из того, что я читал, NonCPS вообще не помогает с проблемами безопасности.Вы должны отключить песочницу для Groovy в конфигурации вашего задания.
В настоящее время это невозможно для многоотраслевых проектов, где Groovy-скрипт берется из scm. Для получения дополнительной информации см. Https://issues.jenkins-ci.org/browse/JENKINS-28178.
источник
Я столкнулся с этим, когда уменьшил количество вводимых пользователем параметров в userInput с 3 до 1. Это изменило тип вывода переменной userInput с массива на примитив.
Пример:
кому:
источник
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use method groovy.lang.GroovyObject invokeMethod java.lang.String java.lang.Object
. Метод ожидал 2 параметра и получил 3.Чтобы обойти изолирование скриптов Groovy, хранящихся в SCM, я рекомендую запускать скрипт как Groovy Command (вместо файла Groovy Script ):
в таком случае Groovy-скрипт переносится из рабочей области в Jenkins Master, где он может быть выполнен как
system Groovy Script
. Песочница подавляется, пока не установлен флажок Использовать песочницу Groovy .источник