当Maven单元测试失败时,如何使Jenkins构建失败?

时间:2015-02-23 21:10:43

标签: maven jenkins maven-surefire-plugin jenkins-build-flow

我正在使用Jenkins,Maven 3.1和Java 1.6。我在Jenkins中设置了以下Maven工作,其中包含以下目标和选项......

clean install -U -P cloudbees -P qa

下面是我的pom.xml surefire配置...

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.17</version>
        <configuration>
                <reuseForks>true</reuseForks>
                <argLine>-Xmx2048m -XX:MaxPermSize=512M </argLine>
                <skipTests>false</skipTests>
        </configuration>
</plugin>

然而,当我的单元测试失败时,Jenkins控制台输出仍然显示“BUILD SUCCESS”并且构建被标记为“不稳定”而不是完全失败。我如何配置Jenkins(或Maven,如果它是什么原样)的东西,以便我的构建失败(不会变得不稳定或通过),如果任何单元测试失败?

以下是控制台输出的内容

17:08:04   MyProjectOrganizationControllerTest.testRecoverFromError » IllegalState Failed to...
17:08:04   MyProjectOrganizationControllerTest.testVerifyDistrictListPopulated » IllegalState
17:08:04   MyProjectOrganizationControllerTest.testUpdateSchool » IllegalState Failed to loa...
17:08:04   MyProjectOrganizationControllerTest.testDeleteSchool » IllegalState Failed to loa...
17:08:04   MyProjectOrganizationControllerTest.testVerifyOrgListPopulatedPrivateSchoolOrgType » IllegalState
17:08:04   MyProjectOrganizationControllerTest.testSubmitMultipleParams » IllegalState Faile...
17:08:04 
17:08:04 Tests run: 155, Failures: 0, Errors: 154, Skipped: 1
17:08:04 
17:08:04 [ERROR] There are test failures.
17:08:04 
17:08:04 Please refer to /scratch/jenkins/workspace/MyProject/MyProject/target/surefire-reports for the individual test results.
17:08:04 [JENKINS] Recording test results
17:08:07 log4j:WARN No appenders could be found for logger (org.apache.commons.beanutils.converters.BooleanConverter).
17:08:07 log4j:WARN Please initialize the log4j system properly.
17:08:14 [INFO] 
17:08:14 [INFO] --- maven-war-plugin:2.4:war (default-war) @ MyProject ---
17:08:15 [INFO] Packaging webapp
17:08:15 [INFO] Assembling webapp [MyProject] in [/scratch/jenkins/workspace/MyProject/MyProject/target/MyProject]
17:08:15 [INFO] Processing war project
17:08:15 [INFO] Copying webapp resources [/scratch/jenkins/workspace/MyProject/MyProject/src/main/webapp]
17:08:15 [INFO] Webapp assembled in [662 msecs]
17:08:15 [INFO] Building war: /scratch/jenkins/workspace/MyProject/MyProject/target/MyProject.war
17:08:20 [INFO] 
17:08:20 [INFO] --- maven-failsafe-plugin:2.17:integration-test (default) @ MyProject ---
17:08:20 [JENKINS] Recording test results
17:08:25 [INFO] 
17:08:25 [INFO] --- maven-failsafe-plugin:2.17:verify (default) @ MyProject ---
17:08:25 [INFO] Failsafe report directory: /scratch/jenkins/workspace/MyProject/MyProject/target/failsafe-reports
17:08:25 [JENKINS] Recording test results[INFO] 
17:08:25 [INFO] --- maven-install-plugin:2.4:install (default-install) @ MyProject ---
17:08:25 
17:08:25 [INFO] Installing /scratch/jenkins/workspace/MyProject/MyProject/target/MyProject.war to /home/jenkins/.m2/repository/org/mainco/subco/MyProject/76.0.0-SNAPSHOT/MyProject-76.0.0-SNAPSHOT.war
17:08:25 [INFO] Installing /scratch/jenkins/workspace/MyProject/MyProject/pom.xml to /home/jenkins/.m2/repository/org/mainco/subco/MyProject/76.0.0-SNAPSHOT/MyProject-76.0.0-SNAPSHOT.pom
17:08:26 Started calculate disk usage of build
17:08:26 Finished Calculation of disk usage of build in 0 seconds
17:08:26 Started calculate disk usage of workspace
17:08:26 Finished Calculation of disk usage of workspace in 0 seconds
17:08:26 [INFO] ------------------------------------------------------------------------
17:08:26 [INFO] BUILD SUCCESS
17:08:26 [INFO] ------------------------------------------------------------------------
17:08:26 [INFO] Total time: 11:00.616s
17:08:26 [INFO] Finished at: Mon Feb 23 17:08:26 UTC 2015
17:08:27 [INFO] Final Memory: 90M/414M
17:08:27 [INFO] ------------------------------------------------------------------------
17:08:27 Waiting for Jenkins to finish collecting data
17:08:28 [JENKINS] Archiving /scratch/jenkins/workspace/MyProject/MyProject/pom.xml to org.mainco.subco/MyProject/76.0.0-SNAPSHOT/MyProject-76.0.0-SNAPSHOT.pom
17:08:28 [JENKINS] Archiving /scratch/jenkins/workspace/MyProject/MyProject/target/MyProject.war to org.mainco.subco/MyProject/76.0.0-  SNAPSHOT/MyProject-76.0.0-SNAPSHOT.war
17:08:31 channel stopped
17:08:31 Started calculate disk usage of build
17:08:31 Finished Calculation of disk usage of build in 0 seconds
17:08:31 Started calculate disk usage of workspace
17:08:31 Finished Calculation of disk usage of workspace in 0 seconds
17:08:31 Finished: UNSTABLE

3 个答案:

答案 0 :(得分:49)

如果您单击Jenkins作业的“构建”部分中的“高级”按钮,则可以将-Dmaven.test.failure.ignore=false添加到MAVEN_OPTS

请参阅Maven Surefire Plugin - surefire:test选项以供参考。

答案 1 :(得分:6)

使用Text Finder插件。将其配置为查找There are test failures并将构建版本降级为FAILED

答案 2 :(得分:0)

另一个有用的黑客是使用groovy post-build来检查和设置测试结果。

e.g。这个groovy获取构建结果,附加有用的东西来构建描述,并在没有通过或失败但是跳过所有测试的情况下将构建结果设置为UNSTABLE。

`namespace IP_GonçaloDias_G00
{
    public partial class RegistoViaturas : Form
    {

        string cvMatrícula="";
        string cvMarca = "";
        string cvModelo = "";
        string cvAnoFabrico = "";
        string cvTipoPropulsão = "";
        string cvCilindrada = "";
        string cvPotência = "";
        double cvAceleração = 0;
        string cvConsumoMédio = "";
        string cvCor = "";
        int cvTipoVeículo = 0;
        string cvCaixa = "";
        DateTime cvPrimeiraMatrícula=DateTime.Now;
        int cvNúmeroRegistos = 0;
        double cvKMPercorridos = 0;
        string cvDescriçãoVeículo = "";
        double cvPreçoAquisição = 0;
        double cvPreçoProposto = 0;
        double cvPreçoVenda = 0;
        DateTime cvDataVenda = DateTime.Now;
        string cvNomeCliente = "";
        public RegistoViaturas()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button7_Click(object sender, EventArgs e)
        {
            int size= Convert.ToInt32(numericUpDown1.Value);
            ArrayViaturas viaturas = new ArrayViaturas(size);

            MessageBox.Show("O tamanho definido para o Array é:   " + viaturas.viaturas.Length);
            groupBox2.Enabled = true;
        }
    }
}`