O Que É um Trap? Executando Limpeza em Sinais e na Saída
Um trap é um mecanismo do shell que executa um comando especificado quando o shell recebe um sinal específico ou está prestes a sair, usado para limpeza.
Quando um script é interrompido ou termina, você frequentemente quer fazer limpeza: apagar arquivos temporários, parar um servidor em background, remover um lock. O comando trap permite registrar código que roda nesses eventos. No CI, os traps garantem que a limpeza aconteça mesmo quando um step falha ou é cancelado no meio.
O que é um trap
O builtin trap associa um comando a um ou mais sinais ou ao evento especial EXIT. Quando esse sinal chega ou o shell sai, o comando registrado no trap roda primeiro.
Um exemplo básico
Escrever trap 'rm -f "$tmpfile"' EXIT garante que o arquivo temporário seja removido sempre que o script terminar, quer ele tenha sucesso, falhe ou seja interrompido. A limpeza fica centralizada em um único lugar.
Alvos comuns de trap
- EXIT: roda sempre que o shell sai, por qualquer motivo.
- SIGINT: trata Ctrl-C / interrupção.
- SIGTERM: trata uma requisição educada de término.
- ERR: roda quando um comando falha (com set -e).
Por que os traps importam
Sem um trap, uma falha precoce pode deixar para trás arquivos temporários, processos em execução ou locks. Um trap garante que a lógica de teardown rode uma vez, não importa como o script termine, o que mantém os ambientes limpos.
Traps no CI
Steps de CI que iniciam serviços em background ou criam recursos temporários deveriam fazer trap de EXIT para derrubá-los. Quando um job é cancelado ou sofre timeout, o runner envia um sinal; fazer trap dele permite que o step faça flush dos logs ou pare serviços antes que o ambiente desapareça.
Teardown limpo em runners gerenciados
Nos runners do Latchkey, a plataforma envia um sinal de término antes de fazer o teardown. Um trap em EXIT ou SIGTERM dá ao seu step a chance de parar um servidor em background ou salvar artifacts de forma limpa quando um run é encerrado antes do tempo.
Principais conclusões
- Um trap executa um comando quando o shell recebe um sinal ou sai.
trap ... EXITcentraliza a limpeza que roda não importa como um script termine.- No CI, os traps garantem que arquivos temporários e serviços em background sejam limpos de forma confiável.