Дженкинс: проведите приемочные тесты Serenity без сбоев

Я пытаюсь добиться следующего:

  1. Запустите набор тестов Serenity (плюс Cucumber) как часть конвейера сборки.
  2. Собирайте отчеты независимо от того, пройдены все тесты или нет (очевидно, они особенно полезны при сбоях)
  3. Только в случае сбоев теста, пишите авторам по электронной почте.
  4. Никогда не завершайте сборку из-за неудачного приемочного теста, так как этот конвейер предназначен для ЭК фиксации. Только хотите потерпеть неудачу, если в Nightly есть сломанные приемочные тесты.

Итак, имея все это в виду, я попытался настроить сборку:

    stage ('Serenity') {
        steps {
            // For the Delivery CI build don't fail on regression failure
            sh 'mvn clean verify -pl regression -DskipCuke=false'
        }
        post {
            always {
              publishHTML([allowMissing: true, alwaysLinkToLastBuild: true, 
                keepAll: true, reportDir: 'regression/target/site/serenity',
                reportFiles: 'index.html', reportName: 'Serenity',
                reportTitles: ''])
            }
            failure{
                echo 'There are regression suite failures.'
                script {
                    currentBuild.result = 'SUCCESS'
                }
                emailext attachLog: true, body: 'Find Attached',
                  compressLog: true, recipientProviders: [[$class:
                   'CulpritsRecipientProvider']], subject: 'Broken Regression Tests', 
                  to: '[email protected]'
            }
        }
    }

Однако это не работает, так как я не могу сбросить значение currentBuild.result на «УСПЕХ». Так что я мог бы все || true передать команде mvn, но это означало бы, что я не могу отправлять сообщения о неработающих регрессионных тестах.

Поэтому мне интересно, справился ли кто-нибудь еще с этим каким-то умным способом. Нужно ли мне назначать код выхода или что-то в этом роде, и будет ли это включать переопределение параметров оболочки по умолчанию в Jenkins?

Любая помощь высоко ценится.


person Dennis    schedule 22.10.2017    source источник


Ответы (2)


Я думаю, вам нужно будет поместить try/catch вокруг оболочки (поэтому запустите его в блоке script{}) и сделайте свою электронную почту в catch. Затем вы можете оставить для сборки значение SUCCESS.

person Rob Hales    schedule 23.10.2017

На самом деле я решил это немного иначе, чем предложение @Rob, но ключом к этому было понимание того, что то, что я хотел сделать, требовало использования блока script с флагом returnStatus. Я предпочитаю это try-catch, так как я на самом деле ожидаю (к сожалению), что это время от времени будет терпеть неудачу, и поэтому предпочел бы разветвить это ниже.

  stage ('Serenity') {
        steps {
          script{
            // For the Delivery CI build don't fail on regression failure
            def bddPassed = ( sh ( returnStatus:true, script:'mvn clean verify -pl regression -DskipCuke=false') == 0 )
            if( !bddPassed ){
              echo 'There are regression suite failures.'
              def mySubject = "Regression Test Failure: ${env.JOB_NAME} - Build# ${env.BUILD_NUMBER}"
              def myBody = "Hi<br/>Please go to <a href='${env.BUILD_URL}Serenity'>the Serenity Report</a> to see more<br/>";

              emailext attachLog: true,
                mimeType: 'text/html',
                body: myBody, 
                compressLog: true,
                recipientProviders: [[$class: 'CulpritsRecipientProvider']], 
                subject: mySubject,
                to: 'xxxxxxx'
            }
            publishHTML([allowMissing: true, alwaysLinkToLastBuild: true,
              keepAll: true, reportDir: 'regression/target/site/serenity', reportFiles: 'index.html',
              reportName: 'Serenity', reportTitles: ''])
          }
       }  
    }
person Dennis    schedule 23.10.2017