我一直在尝试设置 Jenkins 以与我的 C# 项目一起使用,以进行自动化测试和代码覆盖。 我已经使用 CoverageConverter.exe
生成和转换了测试工作和代码覆盖率文件(不使用任何插件 - 只是直接批处理文件和原始 EXE),但是当我添加 MSTest 构建后步骤以获取要在 Jenkins 中显示的数据时,我收到以下错误:
[MSTEST-PLUGIN] Processing test results in file(s) **/*.trx
MSTest: D:JenkinsjobsFrameworkworkspaceTestResultsjames_CD 2016-03-18 20_05_13.trx
ERROR: Step ‘Publish MSTest test result report’ aborted due to exception:
java.lang.NoClassDefFoundError: hudson/maven/MavenBuild
at hudson.plugins.emma.EmmaPublisher.perform(EmmaPublisher.java:103)
at hudson.plugins.mstest.MSTestPublisher.perform(MSTestPublisher.java:134)
at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:782)
at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:723)
at hudson.model.Build$BuildExecution.post2(Build.java:185)
at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:668)
at hudson.model.Run.execute(Run.java:1763)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
at hudson.model.ResourceController.execute(ResourceController.java:98)
at hudson.model.Executor.run(Executor.java:410)
Caused by: java.lang.ClassNotFoundException: hudson.maven.MavenBuild
at jenkins.util.AntClassLoader.findClassInComponents(AntClassLoader.java:1376)
at jenkins.util.AntClassLoader.findClass(AntClassLoader.java:1326)
at jenkins.util.AntClassLoader.loadClass(AntClassLoader.java:1079)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 11 more
尽管存在错误,但"测试结果趋势"图表显示在项目页面上并且似乎是正确的,并且有一个"代码覆盖率趋势"部分,但有一个断开的图像链接。
我使用以下批处理片段运行测试和代码覆盖率:
@ECHO "`nRunning tests`n---------------------------"
"C:Program Files (x86)Microsoft Visual Studio 11.0Common7IDECommonExtensionsMicrosoftTestWindowvstest.console.exe" TestFrameworkbinReleaseTestFramework.dll /EnableCodeCoverage /Settings:TestFrameworkSettings.testsettings /Logger:trx
@ECHO %ERRORLEVEL%
REM @IF %ERRORLEVEL% NEQ 0 EXIT 1
@ECHO "`n`nConverting code coverage results`n---------------------------"
@IF EXIST emma. rd emma /s /q >nul
md emma
del emmatemp.coverage /Q >nul
for /R TestResults %%f in (*.coverage) do copy "%%f" emmatemp.coverage /B /Y
"C:Program FilesJenkinsUtilitiesCoverageConverterCoverageConverter.exe" /in:emmatemp.coverage /out:emmacoverage.xml /xsl:"C:Program FilesJenkinsUtilitiesMSTestCoverageToEmma.xsl"
goto END
我从另一个 Jenkins 系统中复制了基本过程,其中有一个类似的项目正在运行,但找不到系统之间的任何相关差异。
我已经尝试过:1. 更新 Java2. 更新詹金斯3. 卸载并重新安装 MSBuild、MSTest、MSTest Runner 和 VSTest Runner 以及 Maven Integration 插件。
我觉得我在这一点上真的很接近,但我对 Java 的经验很少,所以我在这一点上无法纠正这个错误。 谁能帮我诊断ClassNotFoundException?
在拼命梳理日志并安装 Eclipse(在另一台机器上)以查看 java 文件后,它开始意外地工作。 这可能与安装 JaCoCo 插件有关,当我注意到我之前安装的用于显示结果的 Emma Line Coverage 插件说它已被 JaCoCo 插件取代时,我也安装了该插件。