Saltar a contenido

Manejo de Errores

Manejo de errores de comandos shell

Los comandos shell a veces pueden fallar. Estos errores se pueden capturar de muchas maneras diferentes.

Si el comando shell no se está asignando a una variable, el comando interrumpirá su rulebook:

do:
   - exit 99
   - echo: esto no se mostrará debido al error anterior

Los errores se pueden suprimir asignando la ejecución del comando a una variable. En ese caso, la variable contendrá el código de retorno y el mensaje de error.

do:
  - cmd_result = shell: nonexisting_command
  - if: '{{ cmd_result.rc > 0 }}'
    then:
       - echo: aquí está el error = {{ cmd_result.output }}

Otra forma de capturar comandos shell es con un bloque try-catch bien ubicado.

do:
  - try:
      - exit 99
    catch:
      - echo: error capturado = ${error_message}

Pero si asigna la salida del comando a una variable, no se lanzará ningún error, haciendo que el try-catch sea inútil.

Lanzar errores con fail

En ciertas situaciones puede querer lanzar errores en su regla. Esto se puede lograr con la operación fail. La operación fail detendrá la regla y cascará el fallo a un ámbito superior.

Lanzar errores es simple:

do:
   - fail: oh my, fail here

Tenga en cuenta que hay diferentes efectos secundarios al lanzar un error, dependiendo del contexto del rulebook:

  • para una regla de pipeline, el trabajo actual fallará y permanecerá en un estado de error.

  • para campos de formulario personalizados, el usuario no podrá abrir el formulario y recibirá el mensaje de error lanzado.

Los errores lanzados se pueden combinar con bloques try-catch para un mejor control de flujo:

def:
   myfunc:
      - fail: hemos fallado
do:
   - try:
       - myfunc:
     catch:
       - echo: myfunc falló mal=${error_message}