2013-04-09 30 views
6

Tôi có một công việc Jenkins nơi tôi chỉ định một cái gì đó như lệnh FxCop sau:Nhấp vào kết quả FxCop trong Jenkins Vi phạm Plugin dẫn đến trống trang

FxCopCmd.exe"/file:"test.dll" /out:"FxCop_Output.xml" /ignoregeneratedcode /project:"C:\Jenkins\extra\Modified_Rules.FxCop" /s /searchgac 

Khi công việc Jenkins đang chạy mà nó tìm thấy một số vi phạm luật và hiển thị biểu đồ cũng như danh sách tên tệp với số lượng vi phạm trong tệp. Tuy nhiên, nếu tôi nhấp vào một tệp không phải C-Sharp, tôi sẽ được đưa đến một trang có dấu chấm than trong tam giác màu đỏ, tuy nhiên không có mã nào được hiển thị, cũng như không có danh sách lỗi FxCop.

http://i.stack.imgur.com/VNKF6.jpg

Có một số loại cấu hình FxCop tôi đang thiếu? Làm thế nào tôi có thể nhận được các plugin Violations để hiển thị các vi phạm mã cho các tập tin này?

+0

Bạn có cung cấp đường dẫn đến file nguồn của bạn trong 'Source Pattern Path'? Ở cuối phần cài đặt cho plugin Vi phạm trong cấu hình dự án của bạn. – Petrik

+0

Phải bao gồm thông tin đó trong câu hỏi ban đầu. Tôi hiện đang chạy Jenkins 1.514 với phiên bản plugin Violations 0.7.15. –

Trả lời

4

Tôi đã tải xuống và sửa đổi mã plugin Violations để hiển thị bảng vi phạm cho các tệp không có mã nguồn và sau đó biên dịch lại plugin Violations (và tải plugin đã sửa đổi của tôi vào Jenkins theo cách thủ công).

Tên tệp cũng không hiển thị như bạn có thể thấy bằng ảnh chụp màn hình ban đầu của tôi, hàm "getFileNameAlt" vừa nhận được tên và dòng "File: $ {it.fileNameAlt}" trong tập lệnh jelly bên dưới hiển thị nó (xem liên kết đến ảnh chụp màn hình bên dưới).

tôi đã thêm dòng sau vào ~ \ vi phạm \ src \ chính \ java \ hudson \ plugins \ vi phạm \ làm \ FileModelProxy.java, để render bảng:

public String getFileNameAlt() { 
    return new File(fileModel.getDisplayName()).getName(); 
} 

public String getSummaryTable() { 

    StringBuilder gst = new StringBuilder(); 
    int count = 0; 

    gst.append(" <table class='violations' width='100%'>\n"); 
    gst.append(" <tr>\n"); 
    gst.append("  <td class='violations-header'> # </td>\n"); 
    gst.append("  <td class='violations-header'> Type </td>\n"); 
    gst.append("  <td class='violations-header'> Class</td>\n"); 
    gst.append("  <td class='violations-header'> Message</td>\n"); 
    gst.append("  <td class='violations-header'> Description</td>\n"); 
    gst.append(" </tr>\n"); 

    Set<Violation> violations = fileModel.getLineViolationMap().get(0); 

    for (Violation v: violations) { 
     ++count; 
     gst.append(" <tr>\n"); 
     gst.append("  <td class='violations'>"); 
     gst.append(count); 
     gst.append("</td>\n"); 
     gst.append("  <td class='violations'>"); 
     gst.append(v.getType()); 
     gst.append("</td>\n"); 
     gst.append("  <td class='violations'>"); 
     gst.append(v.getSource()); 
     gst.append("</td>\n"); 
     gst.append("  <td class='violations'>"); 
     gst.append(v.getMessage()); 
     gst.append("</td>\n"); 
     gst.append("  <td class='violations'>"); 
     gst.append(v.getPopupMessage()); 
     gst.append("</td>\n"); 
     gst.append(" </tr>\n"); 
    } 
    //} 
    gst.append(" </table>\n"); 
    gst.append("<p><br>\n"); 
    gst.append("<h3>Total Number of violations: \n"); 
    gst.append(count); 
    gst.append("</h3><p>\n"); 
    return gst.toString(); 
} 

Và sau đó cập nhật ~ \ vi phạm \ target \ classes \ hudson \ plugins \ violation \ render \ FileModelProxy \ index.jelly tập tin thêm nó ngay trên mã sẽ hiển thị các vi phạm trong mã nguồn (mà đã làm việc cho tôi), nó là "" tóm tắt dòng dưới đây :

<j:set 
    var="iconDir" 
    value="${rootURL}/plugin/violations/images/16x16"/> 

<j:set var="href" value="${it.showLines}"/> 
<h1><img src="${image}"/> File: ${it.fileNameAlt}</h1> 

<j:out value="${it.summaryTable}"/> 

<j:forEach var="t" items="${model.typeMap.entrySet()}"> 
    <table class="pane"> 
    <tbody> 
     <tr><td class="pane-header" colspan="5"><j:out value="${it.typeLine(t.key)}"/></td></tr> 
     <j:forEach var="v" items="${t.value}"> 
     <tr> 
      <td class="pane"> 
      <j:if test="${href}"> 
       <a href="#line${v.line}">${v.line}</a> 
      </j:if> 
      <j:if test="${!href}"> 
       ${v.line} 
      </j:if> 
      </td> 
      <!--<td class="pane">${v.source}</td> --> 
      <td class="pane"><j:out value="${it.severityColumn(v)}"/></td> 
      <td class="pane" width="99%">${v.message}</td> 
     </tr> 
     </j:forEach> 
    </tbody> 
    </table> 
    <p></p> 
</j:forEach> 

Cuối cùng tôi đã chơi với tệp style.css một chút, thêm một định nghĩa bảng phong cách gọi là "vi phạm" (~ \ vi phạm \ mục tiêu \ vi phạm \ css \ style.css):

.violations { 
    margin-top: 4px; 
} 
.violations td { 
    padding: 4px 4px 3px 4px; 
} 

table.violations { 
    width: 100%; 
    border-collapse: collapse; 
    border: 1px #bbb solid; 
} 
table.violations > tbody > tr > td:last-child { 
    border-right: 1px #bbb solid; 
} 

td.violations { 
    border: 1px #bbb solid; 
    padding: 3px 4px 3px 4px; 
    vertical-align: middle; 
} 

td.violations-header { 
    border: 1px #bbb solid; 
    border-right: none; 
    border-left: none; 
    background-color: #f0f0f0; 
    font-weight: bold; 
} 

th.violations { 
    border: 1px #bbb solid; 
    font-weight: bold; 
} 

Bức tranh dưới đây cho thấy bảng kết quả cho một tập tin mà không có mã nguồn. Trong trường hợp của tôi các tập tin không kết thúc bằng "cs"

http://i.stack.imgur.com/StChP.jpg

+0

Tôi đã làm theo lời khuyên của bạn và sửa các plugin. Bạn có thể tải xuống phiên bản này tại đây: https://github.com/MoJo2600/violations-plugin/releases – MoJo2600

+0

Có thể khắc phục sự cố với StyleCop theo cách tương tự không? – Kolky

+0

@ MoJo2600 cách sử dụng plugin được tạo. Vui lòng giúp –

1

Tôi nghĩ bạn có thể đang xem this violations plugin issue (được báo cáo trong Jika của Jenkins). Ngoài ra còn có một vấn đề tương tự hiển thị kết quả StyleCop. Bạn có thể xác nhận phiên bản Jenkins và Violation Plugin của mình không?

Các vấn đề liên quan