2013-04-09 21 views
6

mam pracę Jenkins gdzie mogę określić coś jak następującego polecenia FxCop:Kliknięcie FxCop wyników w Jenkins łamania wtyczki prowadzi do pustej strony

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

Gdy praca Jenkins jest prowadzony znajdzie szereg łamania kodu i wyświetla wykres, a także listę nazw plików z liczbą naruszeń w pliku. Jeśli jednak kliknę plik inny niż C-Sharp, przejdę na stronę z wykrzyknikiem w czerwonym trójkącie, ale nie wyświetli się żaden kod, ani lista błędów FxCop.

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

Czy istnieje jakiś rodzaj konfiguracji FxCop mi brakuje? Jak mogę uzyskać wtyczkę Naruszenia, aby wyświetlić naruszenia kodu dla tych plików?

+0

Czy podać ścieżkę do plików źródłowych w «źródło Path wzorzec»? Jest na końcu ustawień wtyczki Naruszenia w konfiguracji projektu. – Petrik

+0

Powinien zawierać te informacje w pierwotnym pytaniu. Używam teraz wersji Jenkins 1.514 z wtyczką Violations w wersji 0.7.15. –

Odpowiedz

4

Skończyło się pobieranie i modyfikowanie kodu wtyczki naruszenia, aby wyświetlić tabelę naruszeń dla plików, które nie mają kodu źródłowego, a następnie rekompilacji wtyczki naruszenie (i ręcznie ładowanie zmodyfikowanej wtyczki do Jenkins).

Nazwa pliku również się nie pojawiła, jak widać na moim oryginalnym zrzucie ekranowym, funkcja "getFileNameAlt" poprawnie pobiera nazwę, a wiersz "Plik: $ {it.fileNameAlt}" w poniższym obrazie galaretki wyświetla (patrz link do zrzucie ekranu poniżej).

I dodaje następujące do ~ \ łamanie \ src \ main \ java \ Hudson \ plugins \ łamanie \ renderowanie \ FileModelProxy.java, aby uczynić tabelę:

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

A potem zaktualizował ~ \ naruszeń \ target \ classes \ hudson \ plugins \ violations \ render \ FileModelProxy \ index.jelly plik dodając go tuż nad kodem, który wyświetlałby naruszenia w kodzie źródłowym (który działał dla mnie), jest to "" linia podsumowania poniżej :

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

Wreszcie grałem trochę z plikiem style.css, dodanie definicji stylu tabeli „łamanie” (~ \ łamanie \ target \ łamanie \ 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; 
} 

Poniższy rysunek przedstawia tabela wynikowy dla pliku, który nie ma kodu źródłowego. W moim przypadku plik nie kończy się w „.cs”

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

+0

Poszedłem za twoją radą i naprawiłem wtyczkę. Jego wersję można pobrać tutaj: https://github.com/MoJo2600/violations-plugin/releases – MoJo2600

+0

Czy byłoby możliwe naprawienie problemów z StyleCop w podobny sposób? – Kolky

+0

@ MoJo2600, jak korzystać z wtyczki u. Proszę pomóc –

1

Myślę, że możesz zobaczyć this violations plugin issue (zgłoszone w Jenkins JIRA). Istnieje również podobny problem z wyświetlaniem wyników StyleCop. Czy jesteś w stanie potwierdzić wersje Jenkins i Violation Plugin?