测试失败后如何中止Jenkins管道阶段

时间:2018-08-07 13:10:22

标签: selenium jenkins automation jenkins-pipeline bdd

我使用 Jenkins 运行自定义BDD框架。目前已将其设置为每天运行,并且整个测试套件每次都运行。现在,我尝试以某种方式设置管道(使用声明性管道),这样我将有几个日常运行阶段:预检查,主运行,报告发送等。我的目标是进行预检查阶段,它将显示很少的关键功能正在运行,并且此后-运行主要套件。而且,如果我的预检查方案将失败,我需要中止下一阶段时遇到一个问题。到目前为止,我还没有找到解决方案,因此,如果有人可以分享想法,我将不胜感激。 问题是执行shell命令总是成功,测试套件不会失败,只是测试场景可能会失败。因此,根据需要,我需要继续/中止下一阶段。 这是我的管道文件现在的外观:

...

pipeline {
   agent {
    ...
   }
   environment {
    ...
   }
   options {
    ...
   }
   triggers {
    ...
   }
   parameters {
    ...
   }
   stages {
    stage('Setup Environment') {
        steps {
            script {
                ...
            }
        ...
        }
    }

    stage('Phase 1: Pre-run Check') {
        steps {
            sh "bash -c '. ~/.rvm/scripts/rvm; bin/hal test ${hal_env} ${params.Browser} --tags @phase-1-check'"
        }
    }
    stage('Test On Firefox') {
        parallel {
            stage('Runner A') {
                steps {
                    sh "bash -c '. ~/.rvm/scripts/rvm; bin/hal test ${hal_env} ${params.Browser} --tags @phase-2-test --retry 2 --parallel [1,4] || true'"
                }
            }
            ...
        }
    }
    stage('Send Daily results') {
        steps {
            ...
        }
    }
   }
   post {
    always {
        ...
    }
   }
  }
  ...

2 个答案:

答案 0 :(得分:0)

您可以确定测试失败时测试套件是否返回非零退出代码吗?

答案 1 :(得分:0)

我无法让测试套件返回退出代码,而是使用了'| tee output”命令将日志输出到一个文件,以后可以使用awk命令读取该文件,并在日志中查找故障。 所以问题解决了,这是我的解决方案: '''

def phase1_status;
...
stage('Phase 1: Pre-run Check') {
            steps {
                sh "bash -c '<Start Command> | tee hal_output'"
                script {
                  phase1_status = sh( returnStatus: true, script: "awk \'/scenario.*failed/ {exit 1}\' hal_output")
                }
            }
}
stage('Test On Firefox') {
            when {
              equals expected: 0, actual: phase1_status
            }
...

'''