Tentativa de reiniciar o Tomcat 8 com gitlab-runner, arquivo pid criado, log vazio, servidor não iniciado

Tentativa de reiniciar o Tomcat 8 com gitlab-runner, arquivo pid criado, log vazio, servidor não iniciado

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

  1. sudoers possui uma entrada para que o gitlab-runner possa executar um script: gitlab-runner ALL=(tomcat) NOPASSWD: /home/tomcat/deploy.sh

  2. 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:

  1. 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.

  1. 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.

  1. Um arquivo pid é criado com um pid dentro, mas o processo não existe.

  2. 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 starto 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 envcmd. Tudo é igual, exceto TERM=unknownquando é 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

informação relacionada