it-swarm.com.de

seed Job bittet um Skriptgenehmigung in Jenkins

Ich habe versucht, einen Seed-Job (mit github-url mit groovigen Skripten) in jenkins auszuführen und erhielt einen Fehler.

Zum ersten Mal bauen. Überspringen von Änderungsprotokoll.
Verarbeitung des DSL-Skripts APIServerDeployer.groovy
FEHLER: Skript noch nicht zur Verwendung freigegeben
Abgeschlossen: FEHLER

5
ricky

Um an dieser Sicherheitsfunktion von Jenkins vorbeizukommen, müssen Sie Ihr Skript genehmigen. Gehen Sie zu Jenkins verwalten -> Skriptgenehmigung in Bearbeitung. In diesem Bildschirm sehen Sie das Skript, das Sie ausführen möchten. Es sollte eine Schaltfläche zum Bestätigen geben, auf die Sie klicken müssen, um das Skript zu genehmigen.

 enter image description here

11
Erwin Alberto

Stellen Sie mit DSL Version 1.60 Script Security ein, bei dem Sie Skripte auf die Whitelist setzen müssen.

Lesen Sie auch die Hinweise zur Migration auf 1.60 .

7
StephenKing

Mit Job DSL Version 1.60 wurde die Skriptsicherheit eingeführt. Um das alte Verhalten wiederherzustellen, deaktivieren Sie Aktivieren Sie die Skriptsicherheit für Job DSL-Skripts im Abschnitt CSRF-Schutz der Seite "Konfigurieren der globalen Sicherheit". Dies sollte nur geschehen, wenn Sie Skripts auf andere Weise genehmigen können, z. B. durch die Genehmigung durch git pull request, wenn Ihr Seed-Job Jobs in git baut.

5
edst

Hier ist ein umfangreiches Skript, mit dem wir Skriptgenehmigungen vorab ausfüllen:


import Java.lang.reflect.*;
import jenkins.model.Jenkins;
import jenkins.model.*;
import org.jenkinsci.plugins.scriptsecurity.scripts.*;
import org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.*;

scriptApproval = ScriptApproval.get()
alreadyApproved = new HashSet<>(Arrays.asList(scriptApproval.getApprovedSignatures()))


// add all manual whitelist methods here.

approveSignature('method groovy.json.JsonBuilder call Java.util.List')
approveSignature('method groovy.json.JsonSlurper parseText Java.lang.String')
approveSignature('method groovy.json.JsonSlurperClassic parseText')
approveSignature('method groovy.lang.Binding getVariables')
approveSignature('method groovy.lang.Binding getVariable Java.lang.String')
approveSignature('method groovy.lang.Binding hasVariable Java.lang.String')
approveSignature('method groovy.lang.Closure getMaximumNumberOfParameters')
approveSignature('method groovy.lang.GString plus Java.lang.String')
approveSignature('method groovy.lang.GroovyObject invokeMethod Java.lang.String Java.lang.Object')
approveSignature('method hudson.model.Actionable getAction Java.lang.Class')
approveSignature('method hudson.model.Actionable getActions')
approveSignature('method hudson.model.Cause$UpstreamCause getUpstreamProject')
approveSignature('method hudson.model.Cause$UserIdCause getUserId')
approveSignature('method hudson.model.ItemGroup getItem Java.lang.String')
approveSignature('method hudson.model.Item getUrl')
approveSignature('method hudson.model.Job getBuildByNumber int')
approveSignature('method hudson.model.Job getLastBuild')
approveSignature('method hudson.model.Job getLastSuccessfulBuild')
approveSignature('method hudson.model.Job isBuilding')
approveSignature('method hudson.model.Run getCauses')
approveSignature('method hudson.model.Run getEnvironment hudson.model.TaskListener')
approveSignature('method hudson.model.Run getParent')
approveSignature('method hudson.model.Run getNumber')
approveSignature('method hudson.model.Run getResult')
approveSignature('method hudson.model.Run getUrl')
approveSignature('method hudson.model.Run getLogFile')
approveSignature('method Java.util.Map containsKey Java.lang.Object')
approveSignature('method Java.util.Map entrySet')
approveSignature('method Java.util.Map get Java.lang.Object')
approveSignature('method Java.util.Map keySet')
approveSignature('method Java.util.Map putAll Java.util.Map')
approveSignature('method Java.util.Map remove Java.lang.Object')
approveSignature('method Java.util.Map size')
approveSignature('method Java.util.Map values')
// ... your list here ...

scriptApproval.save()

void approveSignature(String signature) {
    if (!alreadyApproved.contains(signature)) {
       scriptApproval.approveSignature(signature)
    }
}

// Utility methods
String printArgumentTypes(Object[] args) {
    StringBuilder b = new StringBuilder();
    for (Object arg : args) {
        b.append(' ');
        b.append(EnumeratingWhitelist.getName(arg));
    }
    return b.toString();
}
3
Jason Kulatunga

Wenn Sie das Jenkins Groovy DSL verwenden, können Sie mit diesem Snippet jedes ausstehende Skript genehmigen:

import org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval

ScriptApproval scriptApproval = ScriptApproval.get()
scriptApproval.pendingScripts.each {
    scriptApproval.approveScript(it.hash)
}

Siehe: https://javadoc.jenkins.io/plugin/script-security/org/jenkinsci/plugins/scriptsecurity/scripts/ScriptApproval.html

1
jeffwtribble

Wenn Sie es programmgesteuert deaktivieren möchten, legen Sie das folgende Skript in $JENKINS_HOME/init.groovy.d/disable-script-security.groovy ab:

import javaposse.jobdsl.plugin.GlobalJobDslSecurityConfiguration
import jenkins.model.GlobalConfiguration

// disable Job DSL script approval
GlobalConfiguration.all().get(GlobalJobDslSecurityConfiguration.class).useScriptSecurity=false
GlobalConfiguration.all().get(GlobalJobDslSecurityConfiguration.class).save()
1
Al J