2017-12-21 43 views
6

मेरी जेनकींस पाइपलाइन फ़ाइल में मैं .json फ़ाइल से बिल्ड कॉन्फ़िगरेशन पढ़ने के लिए JsonSlurperClassic का उपयोग करता हूं। हालांकि यह कोड प्रस्तुत करता है जिसे पर स्क्रिप्ट स्वीकृति पृष्ठ में अनुमोदित करने की आवश्यकता है। जब मैं इसे जीयूआई पर करता हूं तो यह ठीक काम करता है।ग्रोवी स्क्रिप्ट कंसोल के माध्यम से जेनकिन्सफाइल से स्क्रिप्ट स्निपेट को कैसे स्वीकृति दें?

हालांकि मेरे पास एक स्क्रिप्ट भी है जो स्वचालित रूप से मेरी जेनकिंस मशीन सेट करती है जो एक काम करने वाली मशीन तैयार करनी चाहिए जिसके लिए आगे जीयूआई संचालन की आवश्यकता नहीं है। यह स्क्रिप्ट पहले से ही स्टार्ट-अप कमांड को स्वीकृति देने के लिए जेनकींस स्क्रिप्ट कंसोल का उपयोग करती है। ऐसा करने के लिए स्क्रिप्ट कंसोल में निष्पादित किया गया groovy कोड इस तरह दिखता है।

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); 

यह ठीक काम करता है, लेकिन अब मैं स्क्रिप्ट के टुकड़े कि मेरे पाइप लाइन से आते हैं स्वीकृत करने के लिए एक ही कोड का उपयोग करना चाहते हैं। मैं

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

जहां scriptSnippetscriptApproval.xml फ़ाइल से लिया जाता है के साथ पहली दो पंक्तियों का आदान-प्रदान। इसे निष्पादित करने से <approvedScriptHashes>scriptApproval.xml फ़ाइल में प्रविष्टि जोड़ती है लेकिन स्क्रिप्ट स्निपेट वाली <pendingSignature> प्रविष्टि को नहीं हटाती है। इसका मतलब है कि यह काम नहीं करता है।

मेरा अनुमान है कि भाषा गलत है, लेकिन groovy-sh या system-commands जैसे अन्य मूल्यों ने कोशिश नहीं की थी। क्या आपके पास कोई विचार है कि यह क्यों काम नहीं करता है?

अपने समय के लिए धन्यवाद।

+0

शायद 'approveClasspathEntry' विधि? आप यहां पूरा करने की कोशिश कर रहे हैं? – mkobit

+0

@mkobit मेरे पास एक स्क्रिप्ट है जो स्क्रैच से मेरा जेनकींस इंस्टेंस सेट करती है। मैं चाहता हूं कि मेरी जेनकिन्स उस स्क्रिप्ट को निष्पादित करने के बाद तैयार हो जाएं। इसका मतलब है कि स्क्रिप्ट को मेरी पाइपलाइन नौकरी से सभी कोड स्निपेट को स्वीकृति देने की आवश्यकता है, या पाइपलाइन-जॉब जीयूआई पर मैन्युअल रूप से स्क्रिप्ट को स्वीकृति देने के अनुरोध के साथ पहले रन पर विफल हो जाएगी। – Knitschi

उत्तर

2

आप ScriptApproval#approveSignature विधि का उपयोग कर सकते हैं। यहां एक उदाहरण दिया गया है जो मेरे जेनकींस पर काम करता है 2.85

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

@Knitschi यह आपके लिए काम करता है? –

+0

देर से प्रतिक्रिया के लिए खेद है। यह काम करता है, बढ़िया! – Knitschi

संबंधित मुद्दे