我有一个Jenkins作业,我指定了以下FxCop命令:
FxCopCmd.exe"/file:"test.dll" /out:"FxCop_Output.xml" /ignoregeneratedcode /project:"C:JenkinsextraModified_Rules.FxCop" /s /searchgac
当Jenkins作业运行时,它会发现一些代码违规,并显示一个图表以及文件中包含违规数量的文件名列表。然而,如果我点击一个非c - sharp文件,我被带到一个红色三角形中带有感叹号的页面,但是没有显示代码,也没有FxCop错误列表。
https://i.stack.imgur.com/VNKF6.jpg是否有某种类型的FxCop配置我错过了?我怎样才能得到违规插件来显示这些文件的代码违规?
我最终下载并修改了违规插件代码,以显示没有源代码的文件的违规表,然后重新编译了违规插件(并手动将修改后的插件加载到Jenkins中)。
文件名也没有显示,你可以看到我原来的屏幕截图,"getFileNameAlt"函数只是正确地获得名称和"File: ${it。在下面的果冻脚本中,fileNameAlt}"行显示它(见下面的截图链接)。
我在~violationssrcmainjavahudsonpluginsviolationsrenderFileModelProxy.java中添加了以下代码来渲染表格:
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();
}
然后更新了~violationstargetclasseshudsonpluginsviolationsrenderFileModelProxyindex。将它添加到源代码中显示违规的代码上方(这对我来说是有效的),它是下面的"总结行:
<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>
最后我稍微修改了一下style.css文件,添加了一个名为"violations"的表样式定义(~violationstargetviolationscssstyle.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;
}
下面的图片显示了没有源代码的文件的结果表。在我的情况下,文件不以"。cs"结尾
https://i.stack.imgur.com/StChP.jpg我想你可能会看到这个违规插件问题(在Jenkins JIRA中报告)。显示StyleCop结果也存在类似的问题。你能确认你的Jenkins和违章插件版本吗?