2017-05-04 1 views
2

Jenkins 환경에서 우리는 여전히 파이프 라인으로 변경하고 싶지 않은 기존 프리 스타일 작업이 있습니다. 그 중 하나는 시스템 그루비 스크립트를 사용합니다. 이번 주 우리는 젠킨스의 2.46 버전에 (또한 업데이트 된 플러그인, 예를 들어, 보안) 및 갑작스러운 시스템 그루비 스크립트의 모든 "젠킨스을 관리"하는 내가 갈 수있는 파이프 라인을 위해 더 이상Jenkins는 시스템 Groovy 스크립트에서 LinkedHashMap을 거부합니다

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use new java.util.LinkedHashMap 
    at org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.StaticWhitelist.rejectNew(StaticWhitelist.java:187) 
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onNewInstance(SandboxInterceptor.java:130) 
    at org.kohsuke.groovy.sandbox.impl.Checker$3.call(Checker.java:191) 
    at org.kohsuke.groovy.sandbox.impl.Checker.checkedConstructor(Checker.java:188) 
    at org.kohsuke.groovy.sandbox.impl.Checker$checkedConstructor$3.callStatic(Unknown Source) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:56) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:194) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:214) 
    at DescriptionPriorities.<init>(Script1.groovy) 
    at DescriptionPriorities.$INIT(Script1.groovy) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) 
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) 
    at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.invoke(StaticMetaMethodSite.java:46) 
    at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.callStatic(StaticMetaMethodSite.java:102) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:56) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:194) 
    at org.kohsuke.groovy.sandbox.impl.Checker$2.call(Checker.java:182) 
    at org.kohsuke.groovy.sandbox.GroovyInterceptor.onStaticCall(GroovyInterceptor.java:33) 
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onStaticCall(SandboxInterceptor.java:140) 
    at org.kohsuke.groovy.sandbox.impl.Checker$2.call(Checker.java:180) 
    at org.kohsuke.groovy.sandbox.impl.Checker.checkedStaticCall(Checker.java:177) 
    at org.kohsuke.groovy.sandbox.impl.Checker$checkedStaticCall$2.callStatic(Unknown Source) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:56) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:194) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:222) 
    at DescriptionPriorities.<clinit>(Script1.groovy) 
Caused: java.lang.ExceptionInInitializerError 
    at sun.misc.Unsafe.ensureClassInitialized(Native Method) 
    at sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:43) 
    at sun.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:142) 
    at java.lang.reflect.Field.acquireFieldAccessor(Field.java:1088) 
    at java.lang.reflect.Field.getFieldAccessor(Field.java:1069) 
    at java.lang.reflect.Field.get(Field.java:393) 
    at org.codehaus.groovy.reflection.CachedField.getProperty(CachedField.java:54) 
    at groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:1805) 
    at groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:3735) 
    at org.codehaus.groovy.runtime.InvokerHelper.getProperty(InvokerHelper.java:175) 
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.getProperty(ScriptBytecodeAdapter.java:456) 
    at org.kohsuke.groovy.sandbox.impl.Checker$4.call(Checker.java:243) 
    at org.kohsuke.groovy.sandbox.GroovyInterceptor.onGetProperty(GroovyInterceptor.java:52) 
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:350) 
    at org.kohsuke.groovy.sandbox.impl.Checker$4.call(Checker.java:241) 
    at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:238) 
    at org.kohsuke.groovy.sandbox.impl.Checker$checkedGetProperty.callStatic(Unknown Source) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:56) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:194) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:230) 
    at Script1.run(Script1.groovy:99) 
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.run(GroovySandbox.java:141) 
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript.evaluate(SecureGroovyScript.java:165) 
    at hudson.plugins.groovy.SystemGroovy.run(SystemGroovy.java:95) 
    at hudson.plugins.groovy.SystemGroovy.perform(SystemGroovy.java:59) 
    at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20) 
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:779) 
    at hudson.model.Build$BuildExecution.build(Build.java:206) 
    at hudson.model.Build$BuildExecution.doRun(Build.java:163) 
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:534) 
    at hudson.model.Run.execute(Run.java:1728) 
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43) 
    at hudson.model.ResourceController.execute(ResourceController.java:98) 
    at hudson.model.Executor.run(Executor.java:405) 

작동하지 않았다 업그레이드하기로 결정 스크립트를 승인하지만 일반적으로 스크립트를 전체적으로 승인하거나 일부 메소드 서명을 허용합니다. 그러나 나는 결코 물건의 사용을 승인 할 필요가 없었다. 또한 스크립트 승인 페이지에는 대기중인 것이 없습니다.

어떻게 든 승인 목록에 추가하거나 무시할 수 있습니까? 아마도 어떻게 든 scriptApproval.xml을 직접 수정할 수 있습니까?

스크립트 보안 플러그인의 버전이 1.27 인 경우 관련성이 있습니다.

답변

0

이미 주어진 답변이 맞지만 항상 xml 파일을 직접 변경하는 것은 정말 짜증나게합니다. 여전히 실패한 2 차 수정 이후 나는 다른 것을 시도했다. GIT에서 파일을로드하는 대신 시스템 Groovy 코드를 직접 작업에로드하고 파일을 직접로드합니다.

evaluate(new File("path/to/file")) 
1

나는이 상황을 여러 번 가지고 수동으로 scriptApproval.xml에 서명을 추가했습니다.

approvedSignatures에 new java.util.LinkedHashMap 추가 : 이런 이유를 모르겠어요

<approvedSignatures> 
    <string>new java.util.LinkedHashMap</string> 
</approvedSignatures> 

, 내가 버그로 고려한다.

관련 문제