如何强制Sonar运行Jenkins的集成测试

时间:2014-05-15 07:29:42

标签: maven jenkins integration-testing sonarqube

我使用以下内容:

  • 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&amp;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替换了后置声纳,但它不起作用。我没有调用我的集成测试。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我设法通过调用jenkins的手动maven脚本来实现这一目的。所以一切都在没有琼斯的Sonar插件。它并不完美,但它确实有效。