2011-09-08 6 views
7

मैंने एक पायथन स्क्रिप्ट निष्पादित करने के लिए एक बिल्ड चरण जोड़ा।
इस स्क्रिप्ट में पिलिंट को कोड की जांच करने के लिए lint.Run (.. args) के साथ बुलाया जाता है।
स्क्रिप्ट काम करता है लेकिन अंत में, निर्माण केवल त्रुटि संदेश के साथ विफल रहता है:पिलिंट के साथ जेनकींस बिल्ड विफलता देता है

Build step 'Execute Python script' marked build as failure

किसी एक विचार क्यों ऐसा होता है है?

उत्तर

1

ऐसा लगता है कि एक गैर शून्य स्थिति (लापता स्क्रिप्ट, बुरा विकल्प ...) के साथ अपने pylint निष्पादन बाहर निकलें, तो शायद आप स्क्रिप्ट एक अपवाद उठाया या एक sys.exit(something_else_than_zero)

+0

सीधे डॉन। मैंने lint.py को डीबग किया और एक कॉल sys.exit (self.linter.msgstatus) के बारे में पता चला जहां सन्दर्भ संदर्भ में नहीं पाया जा सका। इसे 0 के साथ बदलकर काम किया गया और अब निर्माण सफल हो रहा है। – Gobliins

11

Pylint को अप्रिय व्यवहार है के साथ बाहर निकलने एक गैर-शून्य निकास कोड वापस लौटाएं, भले ही एक छोटी चेतावनी समस्या पाई। केवल जब सब कुछ ठीक था, 0 वापस आ गया है (मैन पेज देखें)।

आमतौर पर एक गैर-शून्य कोड त्रुटि को इंगित करता है, जेनकिंस बिल्ड विफल रहता है।

  • pylint कि हमेशा रिटर्न 0. फिर जेनकींस pylint की वजह से असफल नहीं हो चारों ओर एक छोटा सा स्क्रिप्ट का उपयोग करें:

    मैं इस पर काबू पाने के लिए दो तरीके से देखते हैं। मैं os.system() और sys.exit (0) के साथ एक छोटी पायथन स्क्रिप्ट कॉलिंग पिलिंट का उपयोग करता हूं। आप इसे पिलिंट के त्रुटि कोड को ओवरराइड करने के रूप में देख सकते हैं।

  • पैच पिलिंट। उदाहरण के लिए, मेरी Linux सिस्टम पर sys.exit() कॉल फ़ाइल /usr/lib/pymodules/python2.6/pylint/lint.py में है
+0

हां, बहुत अच्छा विचार। मैं कोशिश करूँगा। – Gobliins

+0

आपकी अपेक्षा के अनुसार काम किया! – Gobliins

+0

मैंने आउटपुट को बिल्ली पर पाइप किया, और ऐसा लगता है कि अब सफलतापूर्वक निर्माण हुआ है। जैसे 'pylint -f एचटीएमएल code.py | बिल्ली> report.html' – zyxue

15

आप बस

डाल सकते हैं

पिलिंट || बाहर निकलें 0

खोल cmdline में। पिलिंट प्लगइन पिलिंट के परिणाम की जांच करके वैसे भी निर्माण में असफल हो जाएगा।

3

हाल rylint बुला sys बाहर निकलने नहीं करने के लिए विकल्प होता है

lint.Run (args, बाहर निकलें = झूठी, ** kwargs)

0

मैं @dmeister से सहमत हैं, लेकिन पाइप लाइन कोड के साथ (Jenkinsfile) मेरा सुझाव कोशिश करें/पकड़ें और फिर त्रुटि को पार्स करें। इस तरह से आप अगर आप सिर्फ pylint से स्थिति बिट्स हो रही है (Pylint डॉक्स देखें) निर्धारित कर सकते हैं, pylint एक उपयोग त्रुटि की सूचना है, या कि क्या वहाँ एक भयावह था असफल: शुद्धतावादियों ग्रूवी को

try {  
    sh 'pylint --output-format=parseable my_module' 
} catch (pylint_rc) { 
    // pylint_rc will be of the form 
    // "hudson.AbortException: script returned exit code NN" 
    // where NN is 1-63 and represents bit field; 
    // bits 0-4 indicate lint-ish issues in analyzed code, 
    // bit 5 indicates pylint usage error 
    echo "pylint_rc= \'$pylint_rc\'" 
    String rc = "$pylint_rc" 
    String code = rc.split()[5] 
    echo "Isolated return code string value $code" 
    int value = code.toInteger() 

    // catastrophic/crash error returns a 1; else there is a pylint return code 
    int error_bits_code = value & 0x20 
    int lint_bits_code = value & 0x1f 
    echo "pylint error_bits_code=$error_bits_code ; lint_bits_code=$lint_bits_code" 
    if ((value == 1) || (error_bits_code != 0)) { 
     currentBuild.result = "FAILURE" 
     throw pylint_rc 
    } 
} 

क्षमा याचना - ग्रूवी मेरी बात नहीं है, इसलिए मुझे यकीन है कि इसमें सुधार किया जा सकता है - मुझे बताएं। एक ज्ञात छेद है: यदि पिलिंट केवल "घातक" -प्रकार त्रुटियों (बिट 0) का पता लगाता है और किसी भी प्रकार का कोई अन्य समस्या नहीं है (बिट्स 1-4 सेट नहीं हैं) तो यह कोड गलत तरीके से अपवाद फेंक देगा। लेकिन मेरा कोड कई मुद्दों को झेलता है, इसलिए यह मेरे लिए कोई समस्या नहीं है। फिक्स (? पार्स त्रुटि संदेश?) ग्रोवी चॉप वाले किसी के लिए छोटा हो सकता है।