Como rodar um processo em segundo plano em um job do Jenkins

O Jenkins é um velho conhecido de quem trabalha com TI hoje, principalmente quando se fala em automação e Devops.

Apesar de fazer parte de uma velha guarda do mundo de administração de sistemas, não dá mais para ter uma TI somente movida ao cron, e aqui mesmo, neste blog, a integração com o Steemit roda deste jeito (já que o blog não está em um git).

Mas tive uma necessidade a pouco tempo de ter jobs com processos enviados para segundo plano. Com eram processos que demoravam horas, o analista que disparou o job iria acompanhar os logs ao longo do dia usando o tail em uma conexão ssh.

Como o shell morre junto com o job no Jenkins, o sistema operacional não conseguia manter o script/programa rodando após o término da execução. E aí foi necessário usar dois ( 3 na realidade ) hacks no Jenkins.

Para resolver o prblema usei uma função do próprio Jenkins, que é avisar que o processo não deve morrer ( donKillMe ) e o daemonize, que como o próprio nome diz, faz com que o programa funcione como um daemon, ou seja, serviço do Linux ( neste caso em questão ).

Por exemplo, caso você tenha um job no Jenkins para chamar o httpd ( como ele já é implementado para ser um daemon ), simplesmente você precisa fazer isto aqui.

ssh -tt usuario@servidor.local ‘BUILD_ID=dontKillMe /usr/apache/bin/httpd’

Como o meu caso era um script que precisava rodar em segundo plano, usei a dica acima da documentação e também o daemonize em paralelo.

ssh -tt usuario@host.local ‘/usr/bin/sudo daemonize -E BUILD_ID=dontKillMe /bin/bash -c arquivo.py’

E pronto, solução entregue e usuário feliz.