我使用 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 {
...
}
}
}
...
答案 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
}
...
'''