Jenkins CI 파이프 라인 스크립트는 groovy.lang.GroovyObject 메소드를 사용할 수 없습니다.
Java 프로젝트를 컴파일하기 위해 Jenkins 2를 사용하고 있으며 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
빠른 수정
비슷한 문제가 있었고 다음을 수행하여 해결했습니다.
- jenkins> jenkins 관리> In-process 스크립트 승인으로 이동합니다.
- 승인해야하는 보류중인 명령이있었습니다.
As this article explains in depth, groovy scripts are run in sandbox mode by default. This means that a subset of groovy methods are allowed to run without administrator approval. It's also possible to run scripts not in sandbox mode, which implies that the whole script needs to be approved by an administrator at once. This preventing users from approving each line at the time.
Running scripts without sandbox can be done by unchecking this checkbox in your project config just below your script:
Alternative 2: Disable script security
As this article explains it also possible to disable script security completely. First install the permissive script security plugin and after that change your jenkins.xml file add this argument:
-Dpermissive-script-security.enabled=true
So you jenkins.xml will look something like this:
<executable>..bin\java</executable>
<arguments>-Dpermissive-script-security.enabled=true -Xrs -Xmx4096m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=80 --webroot="%BASE%\war"</arguments>
Make sure you know what you are doing if you implement this!
You have to disable the sandbox for Groovy in your job configuration.
Currently this is not possible for multibranch projects where the groovy script comes from the scm. For more information see https://issues.jenkins-ci.org/browse/JENKINS-28178
To get around sandboxing of SCM stored Groovy scripts, I recommend to run the script as Groovy Command (instead of Groovy Script file):
import hudson.FilePath
final GROOVY_SCRIPT = "workspace/relative/path/to/the/checked/out/groovy/script.groovy"
evaluate(new FilePath(build.workspace, GROOVY_SCRIPT).read().text)
이 경우 groovy 스크립트는 작업 공간에서 Jenkins Master로 전송되어 system Groovy Script
. Use Groovy Sandbox 가 선택 되어 있지 않으면 샌드 박싱이 억제됩니다 .
userInput의 사용자 입력 매개 변수 수를 3에서 1로 줄 였을 때이 문제가 발생했습니다. 이로 인해 userInput의 변수 출력 유형이 배열에서 기본 형식으로 변경되었습니다.
예:
myvar1 = userInput['param1']
myvar2 = userInput['param2']
에:
myvar = userInput
'program story' 카테고리의 다른 글
액세스 위반 예외 포착? (0) | 2020.10.04 |
---|---|
double.NaN이 자신과 같지 않은 이유는 무엇입니까? (0) | 2020.10.04 |
Android와 Facebook 공유 의도 (0) | 2020.10.04 |
전쟁 파일에서 Jenkins 업데이트 (0) | 2020.10.04 |
Android에서 로딩 대화 상자를 만드는 방법은 무엇입니까? (0) | 2020.10.04 |