web-dev-qa-db-fra.com

Comment approuver des extraits de script d'un fichier jenkins via la console de script groovy?

Dans mon fichier de pipeline jenkins, j'utilise la variable JsonSlurperClassic pour lire les configurations de construction à partir d'un fichier .json. Ceci introduit cependant le code qui doit être approuvé sur la page in-process Script Approval . Cela fonctionne bien lorsque je le fais sur l'interface graphique.

Cependant, j'ai également un script qui configure automatiquement ma machine jenkins, ce qui devrait créer une machine prête à fonctionner et ne nécessitant aucune opération supplémentaire de l'interface graphique. Ce script utilise déjà la console de script jenkins pour approuver les commandes de démarrage de l'esclave. Le code groovy qui est exécuté dans la console de script pour ce faire ressemble à ceci.

def language = 'system-command';
def scriptSnippet = 'ssh me@slavemachine Java -jar ~/bin/slave.jar';

def scriptApproval = Jenkins.instance.getExtensionList(
    'org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval')[0];
def scriptHash = scriptApproval.hash(scriptSnippet, language);
scriptApproval.approveScript(scriptHash);

Cela fonctionne bien, mais je souhaite maintenant utiliser le même code pour approuver le script Extraits extraits de mon pipeline. J'ai échangé les deux premières lignes avec

def language = 'groovy'
def scriptSnippet = 'new groovy.json.JsonSlurperClassic';

où la scriptSnippet provient du fichier scriptApproval.xml . L'exécution de cette opération ajoute une nouvelle entrée <approvedScriptHashes> au fichier scriptApproval.xml mais ne supprime pas l'entrée <pendingSignature> contenant l'extrait de script. Cela signifie que cela ne fonctionne pas.

Mon hypothèse est que la langue est fausse, mais les autres valeurs que j'ai essayées, comme groovy-sh ou system-commands, ne fonctionnaient pas non plus. Avez-vous des idées pour lesquelles cela ne fonctionne pas?

Merci pour votre temps.

9
Knitschi

Vous pouvez utiliser ScriptApproval#approveSignature méthode. Voici un exemple qui fonctionne sur mon Jenkins 2.85

def signature = 'new groovy.json.JsonSlurperClassic'
org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval.get().approveSignature(signature)
9
Vitalii Vitrenko
import org.jenkinsci.plugins.scriptsecurity.scripts.*
toApprove = ScriptApproval.get().getPendingScripts().collect()
toApprove.each {pending -> ScriptApproval.get().approveScript(pending.getHash())}
2
Anna Hr.