starter run play framework create playframework centos playframework-2.0 load-balancing nightly-build

playframework - run - Cómo publicar la aplicación Play Framework de Jenkins para cargar un entorno equilibrado



sbt play framework (2)

Acabo de comenzar a configurar 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.

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 app-1.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 symlink / 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 elimina.

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

La versión de la aplicación-0.9 se inició originalmente ejecutando un siguiente script.

/etc/init.d/play start

El script es una modificación del siguiente script:

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

Básicamente el script se ejecuta siguiendo el comando, que encontré desde el archivo de inicio dentro del archivo app-xxx.zip.

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

También pensé en crear una secuencia de comandos de recarga, que verifique que la aplicación de reproducción se esté ejecutando; de lo contrario, la aplicación de reproducción se inicia y no se reinicia.

/etc/init.d/play reload

Un saludo, Markku


He creado una secuencia de comandos python para implementar continuamente desde Jenkins una aplicación de juego. Básicamente lo que hace el script es el siguiente:

  • Encuesta a Jenkins para verificar si hay una nueva versión disponible
  • Si uno está disponible
    • Mira el código correspondiente a la confirmación
    • Compilar
    • Crea un paquete.
    • Reiniciar el servidor de juego
  • De lo contrario, duerma un retraso antes de sondear en otro momento

La estrategia de reinicio es actualmente básica, pero podría modificar la secuencia de comandos para implementar otra con bastante facilidad. No hay más documentación, pero el archivo de código y configuración es legible y comentado.


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 play dist . En nuestro caso usamos play stage , scp nuestros archivos por separado para webapps / foo / 0.1-SNAPSHOT-20121011 / y luego cambiamos el enlace simbólico actual .

Después de descomprimir, cambio symlink / 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?

Así es como me gusta nuestra configuración, usando 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, podrías crear un JAR ejecutable que contuviera TODAS las Play y tus dependencias, incluyendo Netty, pero sería un archivo enorme (solo los Deps de Play son 33MB), pierdes la capacidad de cambiar fácilmente la versión de Play que se está usando (que yo '' ha cambiado tres veces en los últimos dos meses) y, por último, necesitaría usar algo más que Play ya que esta opción no es compatible (es decir, http://maven.apache.org/plugins/maven-shade-plugin/examples/ ejecutable-jar.html )

También pensé en crear una secuencia de comandos de recarga, que verifique que la aplicación de reproducción se esté ejecutando; de lo contrario, la aplicación de reproducción se inicia y no se reinicia.

Esta es la secuencia de comandos de despliegue que se muestra en la entrada del 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 invocarse con SSH desde un script ANT en Jenkins, o manualmente como ./deploy 0.1-SNAPSHOT-20121012