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.
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)
import org.jenkinsci.plugins.scriptsecurity.scripts.*
toApprove = ScriptApproval.get().getPendingScripts().collect()
toApprove.each {pending -> ScriptApproval.get().approveScript(pending.getHash())}