Cuando cancelas una ejecución de flujo de trabajo, es probable que ejecutes otro software que utiliza recursos relacionados con ella. Para ayudarte a liberar los recursos relacionados con dicha ejecución de flujo de trabajo, podría ser útil entender los pasos que realiza GitHub para cancelar una ejecución de flujo de trabajo.
- Para cancelar una ejecución de flujo de trabajo, el servidor vuelve a evaluar las condiciones
if
para todos los trabajos que se ejecutan actualmente. Si la condición se evalúa comotrue
, el trabajo no se cancelará. Por ejemplo, la condiciónif: always()
se evaluaría como true y el trabajo continúa en ejecución. Cuando no hay condición, es equivalente a una condiciónif: success()
, que solo se ejecuta si el paso anterior ha finalizado correctamente. - Para los jobs que necesitan cancelarse, el servidor envía un mensaje de cancelación a todas las máquinas ejecutoras con jobs que necesitan cancelarse.
- Para los trabajos que siguen en ejecución, el servidor vuelve a evaluar las condiciones
if
para los pasos sin finalizar. Si la condición se evalúa comotrue
, el paso continúa ejecutándose. Puedes usar la expresióncancelled
para aplicar una comprobación de estado decancelled()
. Para más información, consulta Evaluación de expresiones en flujos de trabajo y acciones. - Para obtener los pasos que se deben cancelar, la máquina del ejecutor envía
SIGINT/Ctrl-C
al proceso de entrada del paso (node
para acciones de JavaScript,docker
para acciones de contenedor ybash/cmd/pwd
cuando se usarun
en un paso). Si el proceso no sale en 7500 ms, el ejecutor enviaráSIGTERM/Ctrl-Break
al proceso y, después, esperará 2500 ms hasta que el proceso salga. Si el proceso aún está ejecutándose, el ejecutor finalizará abruptamente el árbol de proceso. - Después del período de tiempo de espera de cancelación de cinco minutos, el servidor finalizará forzosamente todos los trabajos y pasos que todavía estén en ejecución.