2017-12-21 83 views
6

W moim pliku potoku Jenkins używam JsonSlurperClassic do odczytu konfiguracji kompilacji z pliku .json. To jednak wprowadza kod, który musi zostać zatwierdzony na stronie w trakcie procesu zatwierdzania skryptu:. Działa to dobrze, gdy robię to przez GUI.Jak zatwierdzić fragmenty skryptu z pliku Jennfile za pomocą konsoli groovy?

Jednak mam również skrypt, który automatycznie konfiguruje moją maszynę Jenkins, która powinna stworzyć gotową do pracy maszynę, która nie wymaga dalszych operacji GUI. Ten skrypt używa już konsoli skryptowej Jennkins do zatwierdzania poleceń uruchamiania slave. Groovy kod, który jest wykonywany w konsoli skryptów w tym celu, wygląda następująco.

def language = 'system-command'; 
def scriptSnippet = 'ssh [email protected] 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); 

Działa to dobrze, ale teraz chcę użyć tego samego kodu zatwierdzić skrypt fragmenty, które pochodzą z mojego rurociągu. Wymieniłem dwie pierwsze linie z

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

gdzie scriptSnippet jest pobierana z pliku scriptApproval.xml. Wykonanie tego dodaje nowy wpis <approvedScriptHashes> do pliku scriptApproval.xml, ale nie usuwa wpisu <pendingSignature> zawierającego fragment kodu skryptu. Oznacza to, że nie działa.

Zgaduję, że język jest nieprawidłowy, ale inne wartości, które próbowałem, takie jak groovy-sh lub system-commands, również nie działały. Czy masz jakieś pomysły, dlaczego to nie działa?

Dziękuję za poświęcony czas.

+0

Być może metoda "approveClasspathEntry"? Co ogólnie próbujesz osiągnąć tutaj? – mkobit

+0

@mkobit Mam skrypt, który konfiguruje instancję Jnkins od zera. Chcę, żeby moje dżinsy były gotowe do wykonania po wykonaniu tego skryptu. Oznacza to, że skrypt musi zatwierdzić wszystkie fragmenty kodu z mojego zadania potoku, lub zadanie pipeline nie powiedzie się po pierwszym uruchomieniu z żądaniem ręcznego zatwierdzenia skryptów za pośrednictwem GUI. – Knitschi

Odpowiedz

2

Można użyć metody ScriptApproval#approveSignature. Oto przykład, który działa na moim Jenkins 2.85

def signature = 'new groovy.json.JsonSlurperClassic' 
org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval.get().approveSignature(signature) 
+0

@Knitschi to działa dla Ciebie? –

+0

Przepraszamy za spóźnioną odpowiedź. Działa, świetnie! – Knitschi

Powiązane problemy