Semplice strumento di distribuzione basato su Java


Sto cercando uno strumento di distribuzione molto semplice per i progetti JVM (Java, Spring, Grails, ecc.), con le seguenti funzionalità:

  • non richiede server/agent/etc dedicato, voglio eseguire la distribuzione da una macchina sviluppatore (o dal server CI) come semplice comando della console
  • non richiede alcuna configurazione speciale del server e non dovrebbe creare la configurazione del server per te
  • basta caricare una GUERRA usando SCP, o idealmente usando rsync (l'aggiornamento è cambiato solo file)
  • (idealmente) caricamento di file statici su s3 / cloudfront
  • può eseguire il comando sul server remoto (riavviare un servizio tomcat)
  • memorizza alcune versioni più recenti sul server e la possibilità di eseguire il rollback su ognuna di esse (in pratica dovrebbe essere un aggiornamento di un collegamento simbolico)
  • può essere configurato per utilizzare diversi server (test, staging e produzione)
  • (idealmente) avere un plugin Maven o un plugin Grails
  • supporta il caricamento su pochi server in parallelo

Dovrebbe essere qualcosa come:

$ deploytool staging deploy 
$ deploytool staging rollback

O

$ mvn deploytool:deploy -P staging
$ mvn deploytool:rollback -P staging

Fondamentalmente è solo un:

  1. compila + prova + crea archivio
  2. crea la directory "data" sul server (/.../application/version-%date%/)
  3. caricare contenuti di GUERRA in questa directory, da maching locale
  4. aggiorna il collegamento simbolico dal precedente (/.../application/current/ -> /.../application/version-%date%/
  5. riavvia tomcat (sudo service tomcat7 restart)
  6. elimina la directory con la versione più vecchia (mantieni solo le ultime 5 versioni o le versioni per gli ultimi 45 giorni)
  7. se qualcosa non va-aggiornamento collegamento simbolico alla versione precedente (e riavvio di tomcat)

Ho dato un'occhiata a Puppet e JClouds, ma sembra che sia una cosa diversa, più sulla configurazione del cluster, non sulla distribuzione. Attualmente sto usando Ruby Capistrano per un progetto e bash scripts per un altro. Capistrano è buono, ma richiede l'installazione di rvm, ruby, gems, ecc., non funziona bene per il team non ruby e richiede molte personalizzazioni per il progetto java.

Quindi, mi chiedo, c'è qualche Strumento simile a Capistrano per progetti Java/JVM?

Author: Bo Persson, 2012-07-23

1 answers

  1. Utilizzare maven-compiler-plugin, maven-surefire-plugin e maven-war-plugin per costruire
  2. Utilizzare buildnumber-maven-plugin per creare proprietà con valore timestamp corrente
  3. Usa wagon-maven-plugin con il valore di timestamp generato per caricare war sul server di staging
  4. Usa sshexec-maven-plugin per avviare script di shell che riavvieranno tomcat con l'applicazione per la versione selezionata
 2
Author: Andriy Plokhotnyuk, 2012-07-23 17:23:23