EDIT
Changed from bug to improvement: that is not a bug. Changed the title and description. My mistake came from the following output in the console after having encountered false-positive errors due to the TASK and DRY plugins upgrade (I first though it was another similar issue):

[ERROR] There are test failures.
[INFO] BUILD SUCCESS
Finished: UNSTABLE
Change By: Julien Carsique (10/Sep/14 11:34 PM)
Summary: Maven Job use of testFailureIgnore option should be configurable  or avoided

        
Issue Type: Bug Improvement
Description: I understood from various emails, issues, discussions and source code that it is a wanted behavior to set a build UNSTABLE when (surefire or failsafe) tests fail. That is consistent with Following the Jenkins [Terminology|  https://wiki.jenkins-ci.org/display/JENKINS/Terminology

However
] ,  when (surefire or failsafe) tests fail,  the  current behavior  Jenkins build status must be UNSTABLE:
<<  A build
 is  error-prone  unstable if it was built successfully  and  inconsistent with a command line  one  or  Freestyle job Maven execution  more publishers report it unstable .

I guess that
 For example  if the  UNSTABLE status was that much important, it would have been implemented on Freestyle jobs too. Especially since Freestyle are so often recommended rather than the useful Maven job.

h3. Problem

First main issue
 JUnit publisher  is  configured and a test fails then  the build  continuation  will be marked unstable .  >>
Second issue is the behavior difference between Maven and Freestyle jobs.

h4.  Freestyle  Maven  job
The result
That
 is the  same as an execution from command line  default case on Maven jobs; the code of https :
//github.com/jenkinsci/maven -  Maven execution is interrupted
plugin/blob/maven -  Maven build is FAILURE
plugin -  Jenkins build is FAILURE

Reproducing the Maven job behavior is partially possible with {{-Dmaven
2 . test 6/src/main/java/hudson/maven/reporters/SurefireArchiver . failure.ignore=true}} option and java#L88 uses  the  use of 'Publish JUnit test result report' post build step (to change the build result from SUCCESS to UNSTABLE).


h4. Maven job
The result is similar to using the
 {{-Dmaven.test.failure.ignore=true}} option:
- *the Maven execution is not interrupted
 by a test failure *
- Maven build is SUCCESS
- Jenkins build is UNSTABLE

Responsible code However, that  is  there: https://github  a few error-prone and inconsistent with the command line or Freestyle job Maven execution . com/jenkinsci/maven  
That would be highlighted by a Jenkins option to switch on or off that feature, rather than the need to know one must pass {{
- plugin/blob/maven-plugin-2 Dmaven . 6/src/main/java/hudson/maven/reporters/SurefireArchiver test . java#L88 failure.ignore=false}} to deactivate it.

The
 main issue is  error-prone aspect comes from  the build continuation, which will for instance install the artifacts:
{noformat}
[INFO] --- maven-surefire-plugin:2.17:test (default-test) @ test-jenkins-failures ---
[ERROR] There are test failures.
[INFO] --- maven-failsafe-plugin:2.17:integration-test (default) @ test-jenkins-failures ---
[INFO] --- maven-failsafe-plugin:2.17:verify (default) @ test-jenkins-failures ---
[ERROR] There are test failures.
[INFO] --- maven-install-plugin:2.5.1:install (default-install) @ test-jenkins-failures ---
[INFO] Installing ...
[INFO] BUILD SUCCESS
Finished: UNSTABLE{noformat}

h3. Solutions

h4. Add an option for ignoring
So, it is recommended in a Maven job to call the {{package} phase rather than {{install}}  or  not  {{deploy}} and use  the  test failures during the  post-  build  steps to deploy the artifacts at the end (the new deployAtEnd Maven option is an alternative) .

An option It  would  highlight that behavior and allow to easily switch from  be nice if there was  a  testFailureIgnore mode  way  to  a standard mode.

h4. Rather
 alternatively  use  for instance the  {{-fae}} Maven 3 option , or improve current implementation not to use the testFailureIgnore property hack

{noformat}-fae,--fail-at-end
 ("                      Only fail the build afterwards; allow all non-impacted builds to continue {noformat}

That would not be the exact equivalent to the current implementation but would still allow to get a status on multiple modules and would only require to
 " catch" ) and get  the  Maven failure at the end of the build.

Having a
 final Maven build FAILED translated to Jenkins build UNSTABLE  would avoid the unwanted execution of other plugins after surefire or failsafe detected the failure . ..

h4.
 Consistency with  Freestyle job

For consistency purpose About the Maven build step in Freestyle jobs ,  they do not behave that way by default. The result is  the  same as an execution from command line:
- Maven execution is interrupted by tests failures
- Maven build is FAILURE
- Jenkins build is FAILURE

Reproducing the Maven job behavior is possible with the {{-Dmaven.test.failure.ignore=true}} option and the use of
 'Publish JUnit test result report' post build step  should  (to change the build result from SUCCESS to UNSTABLE).

As for the Maven job, it would
 be  great if the 'Publish JUnit test result report' post build step would be  able to switch the Jenkins build result from FAILURE to UNSTABLE when the BUILD failure is only due to Maven  tests failure  test failures .
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators.
For more information on JIRA, see: http://www.atlassian.com/software/jira

--
You received this message because you are subscribed to the Google Groups "Jenkins Issues" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jenkinsci-issues+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to