J'exécute Jenkins dans un environnement de confiance local où j'essaie de gérer ce pipeline. Ce Jenkinsfile est vérifié dans git.
#!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()
}
Les premières fois que j'ai exécuté la construction, j'avais besoin d'approuver manuellement les modifications (Jenkins-> Mange Jenkins-> Approbation de script en cours de traitement). Maintenant, j'ai cette exception et il n'y a rien à approuver. Tout ce que je veux faire, c'est analyser un fichier XML. Ces contrôles de sécurité peuvent-ils être complètement ignorés pour les constructions en pipeline?
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
Actuellement, ce n'est pas possible. Il existe un ticket ouvert pour ce problème https://issues.jenkins-ci.org/browse/JENKINS-28178
Essayez le plugin jenkins suivant: https://wiki.jenkins-ci.org/display/JENKINS/Permissive+Script+Security+Plugin Il désactive le bac à sable. Travaille pour moi.
Vous pouvez résoudre le problème en procédant comme suit:
ajoute le paramètre de ligne de commande permissive-script-security.enabled
au maître Jenkins avec la valeur:
true
si vous souhaitez désactiver l'approbation des scripts, mais que les signatures potentiellement dangereuses seront consignées:
-Dpermissive-script-security.enabled=true
no_security
si vous souhaitez désactiver le besoin d'approuver les scripts et désactiver également la journalisation des signatures potentiellement dangereuses:
-Dpermissive-script-security.enabled=no_security
Comme indiqué ci-dessus: dans les nouvelles versions de Jenkins, Script Security a été renforcé. Toutefois, pour le cas d'utilisation spécifique de la lecture d'une version à partir du pom.xml
de Maven, vous pouvez utiliser readMavenPom
à partir du plugin Pipeline Utility Steps :
pom = readMavenPom file: 'pom.xml'
pom.version
Avec d'autres solutions dans cette question StackOverflow aussi.