6

Acabo de comenzar a configurar el entorno de compilación nocturno a prueba de balas para la aplicación basada en Play. Hasta ahora no he encontrado un buen tutorial sobre este tema. ¿Podría revisar la solución actual que estoy configurando? Gracias.Cómo publicar la aplicación Play Framework de Jenkins para cargar el entorno balanceado

Configure Play Framework en el servidor de Jenkins y cree un trabajo, que crea un paquete de distribución cada 24 horas desde el repositorio de git/svn.

play dist 

El comando anterior crea el archivo app1.0.zip. El archivo se copia y descomprime en varios nodos. Estamos utilizando el equilibrador de carga. Finalmente, el archivo se descomprime en la carpeta /home/play/webapp/app-1.0.

Después de descomprimir, cambio el enlace simbólico/home/play/webapp/app => /home/play/webapp/app-1.0 y vuelvo a cargar el proyecto. ¿Este enlace simbólico es realmente necesario? ¿Puedo simplemente descomprimir archivos sobre archivos viejos? ¿Realmente necesito descomprimir el proyecto? ¿Puedo simplemente crear un archivo jar y ejecutarlo en el servidor?

play reload 

Finalmente la aplicación anterior se ha eliminado.

rm -rf /home/play/webapp/app-0.9 

versión de la aplicación-0.9 se inició originalmente mediante la ejecución de una secuencia de comandos siguiente.

/etc/init.d/play start 

Script es una modificación de la secuencia de comandos siguiente:

http://monocaffe.blogspot.fr/2012/09/a-play-framework-server-setup.html

guión funciona básicamente siguiente comando, que encontré desde el archivo de inicio en el interior app-xxx.zip archivo.

exec java $* -cp "`dirname $0`/lib/*" play.core.server.NettyServer `dirname $0` 

también hice pensado en crear una secuencia de comandos de recarga, que verifica la aplicación se está ejecutando el juego, si no, el juego se inicia la aplicación, no se reinicia.

/etc/init.d/play reload 

Saludos, Markku

Respuesta

1

he creado un python script para desplegar de forma continua desde Jenkins una aplicación de juego. Básicamente lo que el guión hace es la siguiente:

  • encuesta Jenkins para comprobar si una nueva versión está disponible
  • Si uno está disponible
    • Salida el código correspondiente a la confirmación tiene
    • Compilar
    • Crea un paquete.
    • reiniciar el servidor de juego
  • dormir en otro por un retraso antes de que el sondeo en otro momento

La estrategia de reinicio es actualmente básico, pero se puede modificar la secuencia de comandos para implementar otro con bastante facilidad. No hay más documentación, pero code y configuration file son legibles y comentados.

+0

Inspirado por su secuencia de comandos creé uno similar, pero sin usar jenkins y con la compilación local de la aplicación. Aquí está el enlace: [play2-git-auto-deploy] (https://github.com/mupakoz/play2-git-auto-deploy) –

1

Soy el chico del blog que publicaste. En esa publicación sugiero que tengas todos los frascos de reproducción en una sola ubicación (/ home/play/libs/current -> play-2.0.4), por lo que no es necesario hacer jugar dist. En nuestro caso usamos play stage, scp nuestros archivos por separado a webapps/foo/0.1-SNAPSHOT-20121011/y luego cambiamos el enlace simbólico actual.

Después de descomprimir puedo cambiar el enlace simbólico/home/reproducción/webapp/app => /home/play/webapp/app-1.0 y el proyecto de recarga. ¿Es necesario este enlace simbólico realmente ? ¿Puedo simplemente descomprimir archivos sobre archivos viejos?

Así es como me gusta nuestra configuración, utilizando enlaces simbólicos, pero eso es solo porque quiero mantener, hasta cierto punto, las versiones anteriores, especialmente si esas son las de CI.

¿Puedo simplemente crear un archivo jar y ejecutarlo en el servidor?

Técnicamente, se podría crear un JAR ejecutable, que contenían de todo el juego y sus dependencias incluyendo Netty, pero eso sería un archivo enorme (sólo los deps Play son 33MB), de que pierda la capacidad de cambiar fácilmente la versión Juego siendo utilizado (que he cambiado tres veces en los últimos dos meses) y, por último, que tendría que utilizar algo más que un juego ya que esta opción no es compatible (es decir http://maven.apache.org/plugins/maven-shade-plugin/examples/executable-jar.html)

también hice pensé en crear una secuencia de comandos de recarga, que verifica que se ejecuta la aplicación , si no, se inicia la aplicación de reproducción, no se reinicia .

Este es el implementar guión se muestra en la entrada de blog:

#!/bin/bash 
# 
# Script to automate CI deployments. Simply stop all 
# servers, change the "current" symlinks to the given 
# target folder and finally, start all servers 
# 

export JAVA_HOME="/usr/lib/jvm/default-java" 

play_home="/home/play" 
webapps_folder="${play_home}/webapps" 

apps=("foo" "bar" "api") 

for app in ${apps[@]}; do 

    echo "Stopping server ${app}" 
    ${play_home}/bin/${app} stop 

    echo "Regenerate current symlink of ${app}" 
    rm ${webapps_folder}/${app}/current 
    ln -s ${webapps_folder}/${app}/${1} ${webapps_folder}/${app}/current 

    echo "Starting server ${app}" 
    ${play_home}/bin/${app} nohup 

done 

exit 0 

La idea de este script es para ser llamado con SSH desde un script ANT Jenkins, o de forma manual como ./deploy 0.1-SNAPSHOT-20121012

Cuestiones relacionadas