Tentando reiniciar o tomcat 8 com o gitlab-runner, arquivo pid criado, log vazio, servidor não iniciado

1

Estou tentando reiniciar meu servidor tomcat 8 após a implantação.

Configuração:

O gitlab-runner é executado com seu próprio usuário (chamado gitlab-runner)

o tomcat usa seu próprio usuário chamado tomcat

  1. sudoers tem 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 para o diretório webapps, desliga o tomact e o reinicia:

cd /home/tomcat/bin sh catalina.sh stop -force ... sh catalina.sh start

Quando executo o script manualmente como o 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 do 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 eu inicio o tomcat, vejo a seguinte saída: Para encerramento:

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 o 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. 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 apenas contém uma linha: tomcat Listening for transport dt_socket at address: 8080

Meu pensamento é que o ambiente é diferente, então eu verifiquei com env cmd. Tudo é igual exceto que TERM=unknown quando é iniciado pelo gitlab-runner.

Você tem alguma pista sobre o que pode acontecer em segundo plano ou apenas coisas que eu poderia testar?

O gitlab-runner é open source e o script que inicia o script de construção é o seguinte: link

    
por sisu 03.10.2015 / 10:07

2 respostas

0

Eu finalmente descobri uma solução que funciona.

Para o problema de não mostrar as variáveis de ambiente, eu me refiro a isto: link O gitlab-runner não possui tty, portanto, nenhuma saída é mostrada.

A causa da falha no início é a seguinte: Analisando o código-fonte do gitlab-runner, você pode encontrar: link

Basicamente, assim que o gitlab-runner termina, ele mata todos os processos restantes. Isso significa que, no meu caso, o servidor estava funcionando por um curto período de tempo antes que o processo fosse morto. É por isso que recebi arquivos de log vazios.

Eu 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 matá-lo. De qualquer forma, o tomcat continua correndo após o corredor parar.

    
por 21.10.2015 / 01:14
0

Simplesmente o seu processo será ignorado, 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
    
por 19.05.2017 / 10:37