2012-01-03 18 views
10

Tôi đang làm việc với hai plugin Jenkins, Email-ExtLog Parser. Tôi có các biểu thức chính quy cho plugin Log Parser như thế nào tôi muốn chúng, và tôi muốn bao gồm đầu ra của plugin Log Parser trong email được gửi cho người dùng sau khi xây dựng.Gửi đầu ra bàn điều khiển được phân tích cú pháp trong email

Plugin Email-Ext có quyền truy cập vào đầu ra của bàn điều khiển và tôi có thể viết lại cụm từ thông dụng cho đầu ra bàn điều khiển trong email, nhưng vì plugin Trình phân tích cú pháp của nhật ký đã thực hiện công việc khó khăn Tôi chỉ có thể kéo đầu ra của nó vào email.

Có ai biết bất kỳ cách nào (giống như biến môi trường Jenkins) điều này có thể được thực hiện không?

Trả lời

0

Nếu bạn có thể kéo nhật ký và ghi vào một tệp. Bạn có thể đính kèm tệp đó dưới dạng tệp đính kèm vào email của mình bằng cách sử dụng Email-Ext.

+0

Có phải Email-Ext cũng có thể nội tuyến nhật ký không? Không thể tìm thấy tài liệu này ở tài liệu? Có lẽ bằng cách nào đó thông qua kịch bản? – Strinder

+1

Tìm giải pháp: Chỉ cần thêm

${BUILD_LOG, maxLines=9999, escapeHtml=false}
vào khu vực nội dung – Strinder

1

Một đồng nghiệp nói với tôi rằng mọi công trình xây dựng trong Jenkins đều có "hành động" liên kết với nó và các plugin Jenkins thực hiện phép thuật của họ thông qua các hành động. Tôi đã có thể tìm thấy tất cả các hành động của hành động của tôi với build.getActions(). Sau đó tôi lặp lại các hành động cho đến khi tôi nhận được LogParserAction là hành động được cung cấp bởi trình cắm Jenkins Log Parser.

Sau đó, tôi đã xem qua mã nguồn của LogParserAction.class để tìm phương thức getErrorLinksFile(). Với phương pháp này, tôi đã có thể nhận được văn bản của nhật ký được phân tích cú pháp. Phương pháp tương tự có tên là getWarningLinksFile() khả dụng cho các cảnh báo và phương pháp khác có sẵn để biết thông tin.

Tôi sau đó lặp qua văn bản trên \n ký tự và áp dụng một số regex để làm cho nó trông như thế nào tôi muốn. Các phần quan trọng của mã bên dưới. Có vẻ tốt hơn nếu bạn xem nó dưới dạng HTML trong Notepad ++

%> 
    <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

Xem [this gist] (https://gist.github.com/1566181) để biết các ý tưởng về việc sử dụng mã Groovy chuẩn hơn; nó chưa được kiểm tra nhưng khá gần. Có vẻ như một sự xấu hổ khi viết Groovy như thế: ( –

+1

Haha, cảm ơn ... Bị kẹt trong thế giới Java mà tôi đoán :) – ubiquibacon