6

Ho appena iniziato a configurare l'ambiente di build notturno antiproiettile per l'applicazione basata su Play. Finora non ho trovato un buon tutorial su questo argomento. Puoi rivedere la soluzione corrente che sto configurando? Grazie.Come pubblicare l'applicazione Play Framework da Jenkins per caricare l'ambiente bilanciato

Imposta Riproduci quadro su server Jenkins e crea un lavoro, che crea un pacchetto di distribuzione ogni 24 ore dal repository git/svn.

play dist 

Il comando sopra riportato crea il file app-1.0.zip. Il file viene copiato e decompresso in più nodi. Utilizziamo il bilanciamento del carico. Alla fine il file viene decompresso nella cartella /home/play/webapp/app-1.0.

Dopo la decompressione, cambio symlink/home/play/webapp/app => /home/play/webapp/app-1.0 e ricarica il progetto. Questo symlink è davvero necessario? Posso semplicemente decomprimere i file su file vecchi? Ho davvero bisogno di decomprimere il progetto? Posso semplicemente creare un file jar ed eseguirlo sul server?

play reload 

Infine, l'app precedente viene rimossa.

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

L'app versione 0.9 è stata originariamente avviata eseguendo uno script seguente.

/etc/init.d/play start 

Script è una modifica del seguente script:

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

Fondamentalmente script viene eseguito seguente comando, che ho trovato dal file di avvio all'interno app-xxx.zip file.

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

ho fatto anche pensato di creare uno script di ricarica, che verifica l'applicazione del gioco è in esecuzione, se non, gioca applicazione viene avviata, non è riavviato.

/etc/init.d/play reload 

Con i migliori saluti, Markku

risposta

1

ho creato un python script di distribuire in modo continuo da Jenkins un'applicazione gioco. Fondamentalmente ciò che fa lo script è la seguente:

  • Poll Jenkins per verificare se una nuova build è disponibile
  • Se uno è disponibile
    • Partenza il codice corrispondente al commettere
    • Compile
    • Crea un pacchetto.
    • riavviare il server di gioco
  • sonno altro per un ritardo prima di polling un'altra volta

La strategia di riavvio è attualmente di base, ma è possibile modificare lo script per implementare un altro abbastanza facilmente. Non c'è più documentazione ma code e configuration file è leggibile e commentato.

+0

Ispirato dal tuo script ne ho creato uno simile, ma senza usare jenkins e compilando l'applicazione localmente. Ecco il link: [play2-git-auto-deploy] (https://github.com/mupakoz/play2-git-auto-deploy) –

1

Sono il ragazzo del blog che hai pubblicato. In questo post suggerisco di avere tutti i contenitori Play in un'unica posizione (/ home/play/libs/current -> play-2.0.4), quindi non c'è bisogno di fare play dist. Nel nostro caso utilizziamo il palcoscenico , scp i nostri file separatamente su webapps/foo/0.1-SNAPSHOT-20121011/e quindi cambia il link simbolico corrente.

Dopo decomprimere posso cambiare link simbolico/home/play/webapp/app => /home/play/webapp/app-1.0 e del progetto di ricarica. È necessario davvero questo symlink? ? Posso semplicemente decomprimere i file su file vecchi?

Ecco come mi piacciono le nostre impostazioni, utilizzando i collegamenti simbolici, ma è solo perché voglio mantenere, in una certa misura, le versioni precedenti, specialmente se quelle sono quelle di CI.

Posso solo creare un file jar ed eseguirlo sul server?

Tecnicamente, si potrebbe creare un JAR eseguibile che conteneva tutti di gioco e le dipendenze tra cui Netty, ma che sarebbe un file enorme (solo le dipendenze Play sono 33MB), si perde la possibilità di cambiare facilmente la versione gioco in uso (che ho cambiato tre volte negli ultimi due mesi) e, infine, si avrebbe bisogno di utilizzare qualcosa di più di giocare dal momento che questa opzione non è supportata (cioè http://maven.apache.org/plugins/maven-shade-plugin/examples/executable-jar.html)

ho anche pensato di creare uno script di ricarica, che verifica l'esecuzione dell'applicazione , in caso contrario, l'applicazione di riproduzione viene avviata, non riavviata.

Questa è la Deploy lo script indicato nella voce 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 

L'idea di questo script è di essere chiamato con SSH da uno script ANT a Jenkins, o manualmente come ./deploy 0.1-SNAPSHOT-20121012