Disparar falla en Jenkins, cuando falla algo en un script de python

Tengo un script de python ejecutándose en la fase de compilación de Jenkins, en el área de ejecución del shell.

El problema es que si la secuencia de comandos falla, todavía veo que la compilación fue exitosa. Verifiqué y python usó algo similar al código de retorno para un comando de shell (¿al que llamas con $?), Aunque no puedo averiguar dónde poner la llamada para tener "cualquier" falla en el script de python para activar ese código de retorno

import sys

..... code here

....functions

sys.exit(-1)

Necesito devolver sys.exit (-1), pero ¿dónde lo pones en el código de Python? Hasta ahora solo puedo manejarlo usando bloques de prueba, y en la parte de excepción puse sys.exit(-1), pero esto agrega mucho código, ya que tengo muchas funciones en el script.

¿Hay una ubicación global que pueda usar para desencadenar la falla, de modo que el trabajo de Jenkins falle?

Answer
def main():
    try:
        do_the_work()
        sys.exit(0) # success
    except:
        # insert code to log and debug the problem
        sys.exit(-1)

En palabras: si do_the_workvuelve, sys.exit(0). Si do_the_workgenera alguna excepción que no maneja por sí mismo, sys.exit(-1). En el interior do_the_work, no regrese excepto en caso de éxito. generar una excepción en cualquier estado de error irrecuperable, por ejemplo

class DoSomethingError( exception)
...

ok = do_something()
if not ok:
    print ("do_something error return")
    raise DoSomethingError

Registro y depuración: desbordamiento de pila de búsqueda para respuestas de python sobre cómo obtener y registrar un seguimiento de error de una excepción detectada.

Esta pregunta es una repetición, consulte las siguientes preguntas similares que ya están respondidas.

¿Cómo/cuándo Execute Shell marca una compilación como falla en Jenkins?

Jenkins Build Script sale después de la ejecución de Google Test