2 votes

unstable build avec unstable avec

Je veux obtenir une construction "UNSTABLE" au lieu de

    //currentBuild.result='UNSTABLE'

    stage 'Publish Reports'

        allowMissing: false
    ])
}

Quelqu'un peut-il me donner une solution ?

2voto

Christopher Orr Points 58514

Si mvn test échoue, il renvoie un code de sortie non nul. Dans ce cas, le sh l'étape lance un AbortException avec "script returned exit code X", provoquant l'arrêt de l'exécution du Pipeline, et étant marqué comme FAILURE.

Ainsi, vous devez trouver la configuration Maven qui renvoie le code de sortie 0 même en cas d'échec des tests. Le pipeline se poursuivra alors et vous pourrez analyser les résultats du test.

Ou bien, vous pouvez vérifier le code de sortie vous-même, en supposant par exemple que Maven renvoie un code de sortie 123 pour indiquer les échecs du test :

// Attempt to execute the tests
int exitCode = sh script: 'mvn test', returnStatus: true

// Check whether testing succeeded, or a known failure code was returned
if (exitCode == 0 || exitCode == 123) {
    // Attempt to parse the test results, if they exist
    junit '**/test-results-dir/TEST-*.xml'

    // At this point, the pipeline will have been marked as 'UNSTABLE',
    // assuming that parsing the results found at least one test failure
} else {
    // Something unexpected happened (e.g. compile failure); stop pipeline.
    // This will cause the pipeline to be marked as 'FAILURE'
    error("Testing failed with exit code ${exitCode}.")
}

1voto

Jon Freedman Points 4411

Ce qui suit fonctionne, mais il doit y avoir une meilleure solution. Je suis assez déçu par la prise en charge des pipelines dans la version 2.19.2 de Jenkins, elle semble un peu en demi-teinte.

def runTests() {
  setTestStatus(sh (returnStatus: true, script: 'mvn clean test'))
}

@NonCPS
def setTestStatus(testStatus) {
  if (testStatus == 0) {
    currentBuild.result = 'SUCCESS'
  } else {
    def testResult = currentBuild.rawBuild.getAction(hudson.tasks.junit.TestResultAction.class)
    currentBuild.result = (testResult != null && testResult.failCount > 0) ? 'UNSTABLE' : 'FAILURE'
  }
}

1voto

Leneurone Points 86

J'obtiens exactement le même comportement en utilisant le junit et l'option Maven -Dmaven.test.failure.ignore=true .

Voici un exemple tiré de mon fichier Jenkins :

stage('Build') {
    ...
    // Run Maven build and don't fail on errors
    withMaven(
            maven: 'Maven3',
            mavenSettingsConfig: 'provided-config-file') {

        sh "mvn clean install -Dmaven.test.failure.ignore=true"
    }
    // publish test results
    junit '**/target/surefire-reports/*.xml'
}

El -Dmaven.test.failure.ignore=true permet à Maven de retourner 0 si les tests ont échoué, au lieu de 1.

Si le code de retour d'une commande exécutée avec sh est différent de 0, l'état de la construction est défini comme suit FAILED et la construction s'arrête.

Avec cette option, Maven renvoie 0 si les tests ont échoué, et la construction passe à l'étape suivante.

El junit archive les résultats des tests, et définit l'état de la construction comme suit UNSTABLE si certains tests ont échoué.

0voto

hakamairi Points 1442

Avez-vous essayé d'utiliser ce drapeau ?

-DtestFailureIgnore=true

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X