Как поместить отчет о неудачном отчете огурца в переменную в jenkins - PullRequest
0 голосов
/ 18 июня 2019

У меня есть конвейер jenkins, который запустит автоматизацию и отправит уведомление в стадо. Проблема в том, что когда результат не удался, он говорит об успешном выполнении, потому что я не могу переопределить значение, чтобы дать правильное условие, чтобы дать статус, отправленный на стадо

class Configs{
    static String appUnderTest = ""
    static int totalTests=1
    static int resultE2E=1
    static String runningTag = ""
    static String buildStatus = ""
    static String notifColor = "#00BFFF"
    static def setBuildStatus(){
      def countAll = Configs.resultE2E
      if (countAll >= totalTests){
        Configs.buildStatus = "SUCCESS"
        Configs.notifColor = "#0ABE51"
      }else{
        Configs.buildStatus = "FAILURE"
        Configs.notifColor = "#FF0000"
      }
      println "count setBuildStatus => countAll ${countAll}"
    }
}
stage("Testing") {
  node('docker') {
      timeout(120) {
        try {
          def docker_run = "docker run -v $WORKSPACE/report:/app/report -e t='\"${cucumberTags}\"' -e BASE_URL=**"
          echo docker_run
          sh docker_run
        }catch(Exception error){
          echo "Cucumber test: FAILED"
          Configs.resultE2E = -1
        }finally{
          sh "ls -a "
          cucumber fileIncludePattern: '**/*.json', jsonReportDirectory: "$WORKSPACE/report/output",  buildStatus: 'FAILURE', failedScenariosNumber: 0, trendsLimit: 5
          generateReport dir: "$WORKSPACE/report/output", file: "*", result: Configs.resultE2E, repName: "Report_cucumber_parallel"
        }
      }
    }
}
stage('Notify'){
  try{
        Configs.setBuildStatus()
        echo "BUild status => ${Configs.buildStatus}"
        flockNotifyFinished()
    }catch(Exception error){
        echo "Someting happen in notify:"
        echo error.toString()
    }finally{
        // currentBuild.result = Configs.buildStatus
        if(Configs.buildStatus == "SUCCESS"){
            echo "out with SUCCESS"
            // return here instead of throwing error to keep the build "green"
            node('ubuntu') {
                echo "SUCCESS"
                currentBuild.result = 'SUCCESS'
                sh "exit 0"
            }
            echo "finished"
        }else{
            echo "FAILURE"
            currentBuild.result = 'FAILURE'
        }
        echo "done"
        return
    }
}
def generateReport(option){
    publishHTML (target: [
                allowMissing: false,
                alwaysLinkToLastBuild: false,
                keepAll: true,
                reportDir: option.dir,
                reportFiles: "${option.file}.html",
                reportName: "${option.repName ?: option.file}_test_${env.BUILD_NUMBER}_${(option.result != 1)? 'FAILED' : 'PASS' }"
            ])
}
def parseStatus(result){
    def status = "? Skip: "
    if (result != "skip"){
        status = (result != 1)? '? Fail: ' : '? Pass: ' 
    }
    return status
}
def flockNotifyFinished(){
  echo "FLOCK notif begin"
  def flockUrl = '*****'

  title = "****${Configs.appUnderTest}"
  text = """
  <ul>
    <li>${parseStatus(Configs.resultE2E)} SmokeTest Web UI</li>
  </ul>"""
  echo text

  def payloadData = [
        attachments : [
            [
                title: title,
                color: Configs.notifColor,
                views: [
                    html: [
                        inline: text,
                        height: 200
                    ]
                ],
                buttons: [
                    [
                        name: "Visit Job",
                        action: [
                            type: "openBrowser",
                            url: env?.BUILD_URL,
                            sendContext: false
                        ],
                        id: "job_url"
                    ],
                ],
            ]
        ]
        ]
    // replace notify success with gif if all is well
    if(Configs.buildStatus == "SUCCESS"){
      def r = new Random()
      def idx = r.nextInt(3)
      payloadData['attachments'][0]['title'] = "*** #${env.BUILD_NUMBER} ${customTag} test result for ${Configs.appUnderTest} is ${Configs.buildStatus}"
      payloadData['attachments'][0]['views'] = [image: [original: [src: memes[idx], width: 320]]]
    }
    def jsonPayload = JsonOutput.toJson(payloadData)
    def posting = "curl -X POST ${flockUrl} -H 'Content-Type: application/json' -d \'${jsonPayload}\'"
    // echo "calon payload:"
    // println posting
    node('ubuntu') {
      try{
        println "Report to flock?"
        println reportFlock
        if (reportFlock == 'true'){
            println "Reporting"
            sh posting  
        }
      }catch(Exception error){
        echo "something wrong with curl flock \n"
        println error.toString()
      }
    }
}

Есть ли способ получить текущее состояние отчета об огурце или любое количество неудачных попыток, чтобы я мог изменить параметр Configs.resultE2E и отправить правильное условие перед отправкой в ​​стадо?

...