我使用以下内容:
maven - 建立项目
jenkins - for CI
声纳 - 用于代码分析
我的项目包含单元和集成测试。我已经配置了上面提到的工具来协同工作。
集成测试与单元测试分开。要运行集成测试,我需要运行具有特定配置文件的maven。 Sonar执行单元测试并收集指标。
如何强制Sonar执行特定的配置文件并从集成测试中收集结果?
修改
我的万无一失和故障安全部分:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12</version>
<configuration>
<skipTests>${skip.unit.tests}</skipTests>
<excludes>
<exclude>**/*IT*.java</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.12</version>
<executions>
<execution>
<id>integration-tests</id>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
<configuration>
<skipTests>${skip.integration.tests}</skipTests>
</configuration>
</execution>
</executions>
</plugin>
编辑2
当我使用clean packag -DskipTests
运行jenkins构建时,否则我的测试将执行两次。
在jenkins构建期间第一次和声纳执行第二次。问题是,当我开始使用clean verify
目标构建jenkins时。我可以看到单元测试和集成测试都已执行。在此步骤之后,Sonar开始工作并且仅单元测试被执行。
编辑3
我已经设法从控制台与maven一起工作声纳。我已将以下个人资料和正确的插件添加到我的pom.xml
:
<profile>
<id>sonar</id>
<!-- Enable coverage computation via JaCoCo for Sonar's needs -->
<build>
<plugins>
<!--
Compute integration test coverage for Sonar
Note: REQUIRES MAVEN 3 - throws InstantiationException: java.util.List otherwise
Beware: Sonar doesn't run the verify phase; you should always 'mvn clean install' before running sonar
-->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<configuration>
<propertyName>jacoco.agent.argLine</propertyName> <!-- default: argLine -->
<includes>
<include>pl/cyfronet/**</include>
</includes>
<destFile>${project.build.directory}/jacoco-integration.exec</destFile> <!-- agent -->
<dataFile>${project.build.directory}/jacoco-integration.exec</dataFile> <!-- report -->
</configuration>
<executions>
<execution>
<id>agent</id>
<goals><goal>prepare-agent</goal></goals>
</execution>
<execution>
<!--
Generate coverage report html in target/site/jacoco/ from target/jacoco.exec
Exec.: mvn verify site
-->
<id>report</id>
<phase>site</phase>
<goals><goal>report</goal></goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
我还在settings.xml
目录中添加了~/.m2/
个文件。
<settings>
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- Example for MySQL-->
<sonar.jdbc.url>
jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8
</sonar.jdbc.url>
<sonar.jdbc.username>sonar</sonar.jdbc.username>
<sonar.jdbc.password>sonar</sonar.jdbc.password>
</properties>
</profile>
</profiles>
</settings>
之后我用以下参数运行mvn:
mvn sonar:sonar -Dsonar.jacoco.itReportPath=target/jacoco-integration.exec
。报告已正确生成声纳。
我试图在我的詹金斯中使用它。我用maven目标sonar:sonar -Dsonar.jacoco.itReportPath=target/jacoco-integration.exec
替换了后置声纳,但它不起作用。我没有调用我的集成测试。有什么想法吗?
答案 0 :(得分:0)
我设法通过调用jenkins的手动maven脚本来实现这一目的。所以一切都在没有琼斯的Sonar插件。它并不完美,但它确实有效。