Intentando reiniciar Tomcat 8 con gitlab-runner, archivo pid creado, registro vacío, servidor no iniciado

Intentando reiniciar Tomcat 8 con gitlab-runner, archivo pid creado, registro vacío, servidor no iniciado

Estoy intentando reiniciar mi servidor Tomcat 8 después de la implementación.

Configuración:

gitlab-runner se ejecuta con su propio usuario (llamado gitlab-runner)

tomcat usa su propio usuario llamado tomcat

  1. sudoers tiene una entrada para que gitlab-runner pueda ejecutar un script: gitlab-runner ALL=(tomcat) NOPASSWD: /home/tomcat/deploy.sh

  2. El script de implementación simplemente copia un archivo en el directorio de aplicaciones web, cierra el sistema y lo reinicia:

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

Cuando ejecuto el script manualmente como usuario de gitlab-runner, todo funciona bien:

  1. sudo -u tomcat /home/tomcat/deploy.sh

Sin embargo, cuando el trabajo se inicia desde gitlab-ci-multi-runner (con un envío al repositorio de gitlab), suceden las siguientes cosas. El gitlab-runner básicamente escribe un script.sh que luego ejecuta el mismo comando desde arriba.

  1. Por lo general, cuando inicio Tomcat veo el siguiente resultado: Para apagar:

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

Cuando lo inicio con gitlab-runner no hay salida para apagar pero el servidor se apaga. Esto realmente está funcionando.

Solo se muestra para el inicio Tomcat started..

  1. Se crea un archivo pid con un pid dentro pero el proceso no existe.

  2. Los archivos de registro se crean pero están vacíos.

Si inicio el servidor en modo de depuración: sh catalina.sh jpda startel archivo log/catalina.out solo contiene una línea:tomcat Listening for transport dt_socket at address: 8080


Pensé que el entorno es diferente, así que verifiqué con el envcmd. Todo es igual excepto TERM=unknowncuando lo inicia gitlab-runner.

¿Tiene alguna pista de lo que podría suceder en segundo plano o simplemente cosas que pueda probar?

gitlab-runner es de código abierto y el script que inicia el script de compilación es este:https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/executors/shell/executor_shell.go#L36

Respuesta1

Finalmente descubrí una solución que funciona.

Para el problema de no mostrar las variables de entorno me refiero a esto:https://bz.apache.org/bugzilla/show_bug.cgi?id=37848 El gitlab-runner no tiene tty, por lo que no se muestra ningún resultado.

La causa del mal inicio es la siguiente: mirando el código fuente de gitlab-runner puedes encontrar esto:https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/executors/shell/executor_shell.go#L84

Básicamente, tan pronto como finaliza gitlab-runner, finaliza todos los procesos restantes. Eso significa que, en mi caso, el servidor estuvo ejecutándose durante un corto período de tiempo antes de que se cancelara el proceso. Por eso tengo archivos de registro vacíos.

Resolví el problema simplemente escribiendo un script de inicio para iniciar y cerrar Tomcat. El gato ahora tiene su propio usuario (y grupo). Ahora el árbol de procesos de Tomcat se inicia con /sbin/init. Ahora gitlab-runner ya no es consciente de este proceso o no puede finalizarlo. De cualquier manera, el gato sigue corriendo después de que el corredor se detiene.

Respuesta2

Simplemente repudiar su proceso será suficiente, por ejemplo tomcat (escriba esto en su .gitlab-ci.yml):

deploy_to_tomcat:
  stage: deploy
  script:
    - sudo /opt/apache-tomcat-7.0.77-dbservice/bin/startup.sh &
    - disown

información relacionada