Shabunk, come ho commentato, Maven ti guida sul modo migliore per fare quello che vuoi, ereditando da anni di esperienza di sviluppo.
Spiegherei cosa farei (e ciò che io stesso realmente) fare.
Quindi stai diritto di utilizzare Maven rilascio Plugin, oltre a un altro (per esempio carico) si sta cercando di fare due differenti cose:
- Identificazione di una versione unica, il che significa codificarla, e l'aggiornamento pom per una nuova versione
- Distribuire la vostra applicazione (non importa quale environnement è)
Maven Release Plugin
Si consideri che il proprio processo è forse più leggero di quello che altri team di sviluppo sono abituati. Intendo dire che ci sono più passaggi tra la verifica delle unità e l'implementazione della produzione in team più grandi (Q & A, accettazione degli utenti, campagne di non regressione). Sembra che tu abbia creato un collegamento che collega tag e distribuzione di produzione. Se si desidera distribuire la propria webapp su diversi ambienti (integrazione, user acceptannce, performance, preprod e così via) è necessario identificare la propria versione e dover essere in grado di ricostruirla (sicuramente e "ripetibile").
Che cosa è inteso per maven-release-plugin. Ti aiuta a verificare che il tuo codice sorgente sia pulito (tutti i file sotto controllo sorgente, senza modifiche), può compilare e passare tutte le fasi di test. Quindi, si occupa della versione pom e del tagging e termina memorizzandolo per un uso futuro nel tuo repository aziendale Maven.
Sono disponibili numerose configurazioni da configurare (ditributionManagement, SCM, configurazione di rilascio del plug-in maven).Ma una volta che è a posto, rilasciando stare versione in una semplice riga di comando:
mvn release:prepare release:perform
Se volete qualche esempio, posso darvi qualche.
<scm>
<!-- Base URL repository -->
<url>scm:svn:http://svn.myorg.corp/svn/repository/</url>
<!-- Developper URL (from trunk or branche) -->
<developerConnection>scm:svn:http://svn.myorg.corp/svn/repository/trunk/project1</developerConnection>
<connection>scm:svn:http://svn.myorg.corp/svn/repository/trunk/project1</connection>
</scm>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-scm-plugin</artifactId>
<version>1.6</version>
<configuration>
<username>${from.settings.xml.user}</username>
<password>${from.settings.xml.password}</password>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.2.2</version>
<configuration>
<tagBase>http://svn.myorg.corp/svn/repository/tags/</tagBase>
<scmCommentPrefix>[DEV#SCM]</scmCommentPrefix>
</configuration>
</plugin>
</plugins>
[...]
</build>
<distributionManagement>
<repository>
<id>enterprise_repo</id>
<name>Enteprise Repository on Artifactory - Stable versions</name> <url>http://repo.corp:8080/artifactory/prj-xxx-releases</url>
</repository>
<snapshotRepository>
<id>enterprise_repo</id>
<name>Enteprise Repository on Artifactory - DEV versions</name>
<url>http://repo.corp:8080/artifactory/prj-xxx-snapshots</url>
</snapshotRepository>
<site>
<id>corporate_site</id>
<name>Corporate public site</name>
<!-- must add wagon plugin that support this protocol -->
<url>ftp://...</url>
</site>
</distributionManagement>
deployement
Ancora una volta, è possibile avere più Environnements su cui si desidera testare la vostra applicazione contro. Ci sono molti plugin che ti permettono di inviare e distribuire la tua guerra: il generale carico-plugin, o più specifici plugin per tomcat, glassfish-plugin, ... I plugin ti danno l'abilità di fare ciò che vuoi. Quindi, la configurazione può essere eseguita in molti modi.
Full Maven way: Il modo completamente integrato con Maven è utilizzare Profile e forse Filters. I profili consentono di descrivere le proprietà e il comportamento, come sembri sapere. I filtri sono tipi di .properties che raggruppano una serie di variabili che verranno utilizzate per sostituire i modelli nel file di configurazione xml in war (ad esempio, la connessione db). Non è quello che uso perché lo trovo meno flessibile di esternalizzare i file. Ma non importa
Maven con il suo ecosistema: Il modo che preferisco è quello di costruire le mie applicazioni con Maven e Jenkins (o un oggetto continuo di integrazione). Questo è il motivo per cui sono d'accordo con Aaron quando dice che dovevi limitare i tuoi strumenti. Usando Jenkins, eseguo ogni ora/giorno la mia applicazione contro Test unitari, generaz. Q & A rapporti, documentazione, ... Ho una versione di rilascio che mi aiuta a produrre tutto ciò che voglio consegnarlo (al mio team di test o al mio cliente) e fornisco alcune informazioni ai miei lavori per distribuirli in diversi ambienti (utilizzando i profili maven o la configurazione integrata di jenkins).
Funziona davvero bene per me, e sono abbastanza sicuro che questo sia il modo giusto di fare.
[EDIT]
Deployment
Ancora una volta, la distribuzione significa diverse fasi del ciclo di vita.
locale/Dev environnement
avrei mai utilizzare Tomcat: distribuire fino ad ora, ma solo perché preferisco utilizzare molo come web container luce (e ben integrato con Maven). Ma sono abbastanza sicuro che ogni kinf di configurazione si adatta alle tue esigenze qui.
Continuous Integration Environnement In un environnement integrazione continua, di solito copiare la guerra direttamente con Jenkins (esportazione * .war sulla macchina desiderata). Il mio modo di fare dipende da molti fattori:
- se CI morbida è sullo stesso (fisico | virtuale) del server che il vostro application server (Tomcat, JBoss, Weblogic, Glassfish, ...uno o più lontano => il tempo di copia supererà il tempo di aggiornamento del server e produrrà un dispiegamento non sicuro (archivi generalmente danneggiati)
- se il server supporta il ricaricamento a caldo (guerra esplosa in web-app per Tomcat) o almeno è a conoscenza del file system modifiche (full guerra in/deploy per JBoss)
- se è necessario interrompere il server prima, ...
la maggior parte del tempo, si tratta di una semplice copia. Se non riesco, uso alcuni plugin Maven integrati (come jahia: plug-in di distribuzione per il famoso CMS: www.jahia.com), o solo un plugin cargo: http://cargo.codehaus.org/Maven2+plugin. Non ho alcun esempio, ma è davvero facile trovarne su internet perché questa configurazione è spesso raccomandata.
Q & A/Accettazione/Produzione environnement
Per questo tipo di Environnements, che spesso (per quanto io ho visto nel mio lavoro) si occupa di Service Level Agreement, noi (I o gruppo admin) ha scritto alcuni script specifici. Sono sicuro che rimarrai deluso, ma come ho detto, non mi affido a Maven per tutto, e per il dispiegamento in particolare. IMHO, questo è un limite di questo strumento. Si può forse fare affidamento sul plugin cargo o su quelli specifici, ma rilasciando una versione o costruendone uno non corrisponde (in sequenza temporale) con il deploy effettivo. Ancor di più, non ho trovato nessun plugin che mi consenta di implementare facilmente su più istanze ... e vale anche la pena di dover arrestare le istanze in un ordine specifico (le esigenze dello SLA). Detto questo, non ho menzionato le proprietà esterne, o gli script SQL, o qualsiasi altra cosa. Sono ulteriori motivi per fare affidamento su uno strumento dedicato.
Quindi, in genere, abbiamo scritto i nostri script ant/sell. Se qualcun altro ha soluzioni migliori, ovviamente sono interrazzato!
Spero di essere stato abbastanza chiaro.
Saluti.
In che modo un profilo supporta l'etichettatura in un repository git e l'incremento della versione di build? Maven è uno strumento come un martello: non è adatto per ogni compito. –
Ti stai sbagliando con le tue premesse di base. –
Sono totalmente d'accordo con te Aaron. Maven è uno degli strumenti migliori che conosco per guidare il ciclo di vita dello sviluppo sulle migliori pratiche. Se non riesci a usarlo, è probabilmente perché non sei sulla strada giusta (per quanto riguarda le migliori pratiche). Quindi devi delegare a un altro strumento, generalmente Ant, Jenkis o qualcos'altro. È difficile, spesso impossibile sul progetto precedente, ma rappresenta il modo giusto per farlo ... +1! –