it-swarm.com.de

Wie kann ich die Sicherheitsprüfungen für Jenkins-Pipeline-Builds deaktivieren?

Ich betreibe Jenkins in einer lokalen vertrauenswürdigen Umgebung, in der ich versuche, diese Pipeline auszuführen. Dieses Jenkinsfile wird in git eingecheckt.

#!groovy
node('master') {
    def ver = pomVersion()
    echo "Building version $ver"
}

def pomVersion(){
    def pomtext = readFile('pom.xml')
    def pomx = new XmlParser().parseText(pomtext)
    pomx.version.text()
}

Beim ersten Ausführen des Builds musste ich die Änderungen manuell genehmigen (Jenkins-> Mange Jenkins-> In-Process-Skriptgenehmigung). Jetzt bekomme ich diese Ausnahme und es gibt nichts zu genehmigen. Ich möchte nur eine XML-Datei parsen. Können diese Sicherheitsprüfungen für Pipeline-Builds vollständig umgangen werden?

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: unclassified field groovy.util.Node version
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.unclassifiedField(SandboxInterceptor.Java:367)
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.Java:363)
    at org.kohsuke.groovy.sandbox.impl.Checker$4.call(Checker.Java:241)
    at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.Java:238)
    at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getProperty(SandboxInvoker.Java:23)
    at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.Java:17)
    at WorkflowScript.pomVersion(WorkflowScript:10)
    at WorkflowScript.run(WorkflowScript:3)
    at ___cps.transform___(Native Method)
    at com.cloudbees.groovy.cps.impl.PropertyishBlock$ContinuationImpl.get(PropertyishBlock.Java:62)
    at com.cloudbees.groovy.cps.LValueBlock$GetAdapter.receive(LValueBlock.Java:30)
    at com.cloudbees.groovy.cps.impl.PropertyishBlock$ContinuationImpl.fixName(PropertyishBlock.Java:54)
    at Sun.reflect.GeneratedMethodAccessor479.invoke(Unknown Source)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
    at Java.lang.reflect.Method.invoke(Method.Java:498)
    at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.Java:72)
    at com.cloudbees.groovy.cps.impl.ConstantBlock.eval(ConstantBlock.Java:21)
    at com.cloudbees.groovy.cps.Next.step(Next.Java:58)
    at com.cloudbees.groovy.cps.Continuable.run0(Continuable.Java:154)
    at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.Java:18)
    at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.Java:32)
    at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.Java:29)
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.Java:108)
    at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.Java:29)
    at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.Java:164)
    at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.Java:276)
    at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$000(CpsThreadGroup.Java:78)
    at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.Java:185)
    at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.Java:183)
    at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.Java:47)
    at Java.util.concurrent.FutureTask.run(FutureTask.Java:266)
    at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.Java:112)
    at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.Java:28)
    at Java.util.concurrent.Executors$RunnableAdapter.call(Executors.Java:511)
    at Java.util.concurrent.FutureTask.run(FutureTask.Java:266)
    at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
    at Java.lang.Thread.run(Thread.Java:745)
Finished: FAILURE
7
Gary

Derzeit ist es nicht möglich. Es gibt ein offenes Ticket für dieses Problem https://issues.jenkins-ci.org/browse/JENKINS-28178

8
Andre

Versuchen Sie folgendes Jenkins-Plugin: https://wiki.jenkins-ci.org/display/JENKINS/Permissive+Script+Security+Plugin Deaktiviert die Sandbox. Funktioniert bei mir.

5
ruediste

Sie können das Problem lösen, indem Sie folgende Schritte ausführen:

  1. install Permissive Script Security plugin (Version 0.3 oder neuer)
  2. fügen Sie den permissive-script-security.enabled-Befehlszeilenparameter zum Jenkins-Master mit dem folgenden Wert hinzu:

    • true, wenn Sie die Genehmigung von Skripts deaktivieren möchten, aber möglicherweise gefährliche Signaturen protokolliert werden:

      -Dpermissive-script-security.enabled=true
      
    • no_security, wenn Sie die Genehmigung von Skripts deaktivieren und auch die Protokollierung potenziell gefährlicher Signaturen deaktivieren möchten:

      -Dpermissive-script-security.enabled=no_security
      
3
agabrys

Wie oben beantwortet: In den neueren Jenkins-Versionen wurde Script Security verschärft. Für den speziellen Anwendungsfall des Lesens einer Version von Maven's pom.xml könnte man readMavenPom aus dem Pipeline Utility Steps Plugin verwenden:

pom = readMavenPom file: 'pom.xml'
pom.version

Mit einigen anderen Lösungen in dieser StackOverflow-Frage auch.

1
Joep Weijers