![Intentando reiniciar Tomcat 8 con gitlab-runner, archivo pid creado, registro vacío, servidor no iniciado](https://rvso.com/image/668039/Intentando%20reiniciar%20Tomcat%208%20con%20gitlab-runner%2C%20archivo%20pid%20creado%2C%20registro%20vac%C3%ADo%2C%20servidor%20no%20iniciado.png)
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
sudoers tiene una entrada para que gitlab-runner pueda ejecutar un script:
gitlab-runner ALL=(tomcat) NOPASSWD: /home/tomcat/deploy.sh
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:
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.
- 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.
.
Se crea un archivo pid con un pid dentro pero el proceso no existe.
Los archivos de registro se crean pero están vacíos.
Si inicio el servidor en modo de depuración: sh catalina.sh jpda start
el 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 env
cmd. Todo es igual excepto TERM=unknown
cuando 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