Jenkins:当测试失败时,如何失败阶段?

g6baxovj  于 2023-01-20  发布在  Jenkins
关注(0)|答案(1)|浏览(167)

我的管道中有一个阶段正在运行一些UI测试,这是我得到的行为:

  • 如果测试通过,则该阶段变为绿色,然后运行下一阶段,最后构建变为绿色。
  • 如果测试失败,则该阶段变为绿色,下一阶段运行,最后构建为黄色(不稳定)

我怎样才能做到,如果一个测试失败了,管道也失败了,而不是进入下一个阶段?
这是我的管道阶段,我尝试添加一个post部分,但即使测试失败,它也会报告成功。

stage('UITests') {
                    steps {
                        withCredentials([file(credentialsId: 'env_file', variable: 'envFile')]) {
                            sh '''
                            cat $envFile > .env.dev
                            make run_tests
                            '''
                            }  
                    }
// Fail build if test fail 
                    post{
                            success {
                                echo "UI Tests passed moving to Build stage"
                            }
                            failure {
                                error "UI Tests Failed, stopping the build"
                            }}
                }

在Jenkins的日志中,我可以看到当测试失败时,我得到
error命令失败,退出代码为1。
当测试通过时不会发生这种情况,那么是否有原因导致post block总是成功?

dm7nw8vv

dm7nw8vv1#

sh步骤返回与实际sh命令相同的状态代码:https://www.jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#sh-shell-script
您可以获取此状态代码,将其值赋给变量,然后失败并显示自定义消息:

def statusCode = sh script:"cat $envFile > .env.dev && make run_tests", returnStatus:true
if (statusCode != 0) {
  error 'UI Tests Failed, stopping the build'
}

相关问题