![Tentativa de reiniciar o Tomcat 8 com gitlab-runner, arquivo pid criado, log vazio, servidor não iniciado](https://rvso.com/image/668039/Tentativa%20de%20reiniciar%20o%20Tomcat%208%20com%20gitlab-runner%2C%20arquivo%20pid%20criado%2C%20log%20vazio%2C%20servidor%20n%C3%A3o%20iniciado.png)
Estou tentando reiniciar meu servidor Tomcat 8 após a implantação.
Configurar:
gitlab-runner é executado com seu próprio usuário (chamado gitlab-runner)
tomcat usa seu próprio usuário chamado tomcat
sudoers possui uma entrada para que o gitlab-runner possa executar um script:
gitlab-runner ALL=(tomcat) NOPASSWD: /home/tomcat/deploy.sh
O script de implantação simplesmente copia um arquivo no diretório webapps, desliga o toct e o reinicia:
cd /home/tomcat/bin sh catalina.sh stop -force ... sh catalina.sh start
Quando executo o script manualmente como usuário do gitlab-runner, tudo funciona bem:
sudo -u tomcat /home/tomcat/deploy.sh
No entanto, quando o trabalho é iniciado a partir do gitlab-ci-multi-runner (com um push para o repositório gitlab), as seguintes coisas estão acontecendo. O gitlab-runner basicamente escreve um script.sh que então executa o mesmo comando acima.
- Normalmente, quando inicio o Tomcat, vejo a seguinte saída: For shutdown:
Using CATALINA_BASE: /home/tomcat/ Using CATALINA_HOME: /home/tomcat/ Using CATALINA_TMPDIR: /home/tomcat/temp Using JRE_HOME: /usr Using CLASSPATH: /home/tomcat/bin/bootstrap.jar:/home/tomcat/bin/tomcat-juli.jar Using CATALINA_PID: /home/tomcat/bin/catalina.pid
Para inicialização:
Using CATALINA_BASE: /home/tomcat/ Using CATALINA_HOME: /home/tomcat/ Using CATALINA_TMPDIR: /home/tomcat/temp Using JRE_HOME: /usr Using CLASSPATH: /home/tomcat/bin/bootstrap.jar:/home/tomcat/bin/tomcat-juli.jar Using CATALINA_PID: /home/tomcat/bin/catalina.pid Existing PID file found during start. Removing/clearing stale PID file. Tomcat started.
Quando eu inicio com o gitlab-runner, não há saída para desligamento, mas o servidor é desligado. Isso está realmente funcionando.
Para a inicialização apenas Tomcat started.
mostra.
Um arquivo pid é criado com um pid dentro, mas o processo não existe.
Os arquivos de log são criados, mas estão vazios.
Se eu iniciar o servidor no modo de depuração: sh catalina.sh jpda start
o arquivo log/catalina.out contém apenas uma linha:tomcat Listening for transport dt_socket at address: 8080
Meu pensamento foi que o ambiente é diferente, então verifiquei com o env
cmd. Tudo é igual, exceto TERM=unknown
quando é iniciado pelo gitlab-runner.
Você tem alguma pista do que pode acontecer em segundo plano ou apenas coisas que eu poderia testar?
gitlab-runner é de código aberto e o script que inicia o script de construção é este:https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/executors/shell/executor_shell.go#L36
Responder1
Finalmente descobri uma solução que funciona.
Para o problema de não mostrar as variáveis de ambiente, refiro-me a isto:https://bz.apache.org/bugzilla/show_bug.cgi?id=37848 O gitlab-runner não tem tty, portanto nenhuma saída é mostrada.
A causa do mau funcionamento da inicialização é a seguinte: Olhando o código-fonte do gitlab-runner você pode encontrar isto:https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/executors/shell/executor_shell.go#L84
Basicamente, assim que o gitlab-runner termina, ele mata todos os processos restantes. Isso significa que, no meu caso, o servidor funcionou por um curto período de tempo antes de o processo ser encerrado. É por isso que recebi arquivos de log vazios.
Resolvi o problema simplesmente escrevendo um script de inicialização para iniciar e desligar o Tomcat. O Tomcat agora tem seu próprio usuário (e grupo). Agora a árvore de processos do Tomcat é iniciada por /sbin/init. Agora, o gitlab-runner não está mais ciente desse processo ou não é capaz de eliminá-lo. De qualquer forma, o gato continua correndo depois que o corredor para.
Responder2
Simplesmente rejeite seu processo, por exemplo Tomcat (escreva isso em seu .gitlab-ci.yml
):
deploy_to_tomcat:
stage: deploy
script:
- sudo /opt/apache-tomcat-7.0.77-dbservice/bin/startup.sh &
- disown