2012-01-03 9 views
10

मैं दो जेनकींस प्लगइन्स, Email-Ext और Log Parser के साथ काम कर रहा हूं। मेरे पास लॉग पार्सर प्लगइन के लिए नियमित अभिव्यक्तियां हैं जो मैं उन्हें चाहता हूं, और मैं निर्माण के बाद उपयोगकर्ताओं को भेजे गए ईमेल में लॉग पार्सर प्लगइन का आउटपुट शामिल करना चाहता हूं।ईमेल में पार्सड कंसोल आउटपुट भेजें

ईमेल-एक्स प्लगइन में कंसोल आउटपुट तक पहुंच है, और मैं ईमेल में कंसोल आउटपुट के लिए अपने नियमित अभिव्यक्तियों को फिर से लिख सकता हूं, लेकिन चूंकि लॉग पार्सर प्लगइन पहले ही कड़ी मेहनत कर चुका है, इसलिए मुझे उम्मीद थी कि कुछ रास्ता था मैं सिर्फ अपने आउटपुट को ईमेल में खींच सकता था।

क्या किसी को किसी भी तरह से पता है (जैसे जेनकींस पर्यावरण चर) यह किया जा सकता है?

उत्तर

0

यदि आप लॉग खींचने और फ़ाइल में लिखने में सक्षम हैं। ईमेल-एक्स्ट का उपयोग करके आप उस फ़ाइल को अपने ईमेल से अनुलग्नक के रूप में संलग्न कर सकते हैं।

+0

पर HTML के रूप में देखते हैं तो क्या यह ईमेल-एक्स के साथ लॉग इनलाइन करने के लिए भी संभव है? दस्तावेज़ीकरण में यह नहीं मिला? शायद किसी भी तरह से पटकथा के माध्यम से? – Strinder

+1

समाधान मिला: सामग्री क्षेत्र – Strinder

1

एक सहकर्मी ने मुझे बताया कि जेनकिंस में प्रत्येक निर्माण के साथ "क्रियाएं" जुड़ी हैं और जेनकिंस प्लगइन्स क्रियाओं के माध्यम से अपने जादू करते हैं। मैं build.getActions() के साथ अपने कार्यों के सभी कार्यों को खोजने में सक्षम था। जब तक मुझे LogParserAction नहीं मिला, तब तक मैंने कार्यों के माध्यम से looped जो जेनकिन्स लॉग पार्सर प्लगइन द्वारा प्रदान की गई कार्रवाई है।

तब मैंने getErrorLinksFile() विधि खोजने के लिए LogParserAction.class के स्रोत कोड को देखा। इस विधि के साथ मैं पार्स किए गए लॉग का पाठ प्राप्त करने में सक्षम था। getWarningLinksFile() नामक एक समान विधि चेतावनियों के लिए उपलब्ध है और दूसरा जानकारी के लिए उपलब्ध है।

फिर मैंने \n चरित्र पर पाठ के माध्यम से looped और कुछ regexs लागू करने के लिए यह देखने के लिए लागू किया कि मैं कैसे चाहता था। कोड के महत्वपूर्ण भाग नीचे हैं। यदि आप इसे नोटपैड ++

%> 
    <TABLE width="100%"> 
     <TR> 
      <TD class="bg1" colspan="2">ERRORS</TD> 
     </TR> 
<% 
    def publisher = null 
    for(iter in project.getPublishersList()){ 
     if(iter.getDescriptor().getDisplayName().equals("Editable Email Notification")){ 
      publisher = iter 
      break 
     } 
    } 
    if(publisher != null){ 
     def logParserResult 
     //Get the LogParserAction from Jenkins 
     for(action in build.getActions()){ 
      if(action.toString().contains("LogParserAction")){ 
       //Get the LogParserResult from the LogParserAction 
       logParserResult = action.getResult() 
       break 
      } 
     } 

     //Get the ErrorLinksFile from the LogParserResult 
     def errorLinksFile = new File(logParserResult.getErrorLinksFile()) 

     //Rewrite the URL so it directs to something useful 
     pattern = ~/<a.*?><font.*?>/ 
     def errorList = [] 
     for(line in errorLinksFile.getText().split("\n")){ 
      //All errors have a link, so this makes sure no superfluous text is displayed 
      if(!line.contains("href")){ 
       continue 
      } 
      errorList.add(line.replaceAll(pattern, "<a href="+ rooturl + build.url + "parsed_console/?\">").minus("</font>")) 
     } 
%> 
     <TR> 
      <TD class="bg2" colspan="2">Total : ${errorList.count{it}} error(s)</TD> 
     </TR> 
<% 
     for(error in errorList){ 
%> 
     <TR> 
      <TD class="errors" colspan="2">${error}</TD> 
     </TR> 
<% 
     } 
%> 
    </TABLE> 
+3

पर

${BUILD_LOG, maxLines=9999, escapeHtml=false}
जोड़ें और अधिक कैनोलिक ग्रोवी कोड का उपयोग करने पर विचारों के लिए [यह gist] (https://gist.github.com/1566181) देखें। यह अनचाहे लेकिन बहुत करीब है। ग्रोवी को लिखने के लिए बस एक शर्म की बात है :( –

+1

हाहा, धन्यवाद ... जावा दुनिया में फंस गया मुझे लगता है :) – ubiquibacon

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