Build Automation Tips

2,769
-1

Published on

Presentazione al Genova Java User Group

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,769
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
1
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Build Automation Tips

  1. 1. Build Automation Tips <ul><ul><li>Carlo Bonamico </li></ul></ul><ul><ul><li>[email_address] </li></ul></ul><ul><ul><li>Genova JUG Meeting - 8/5/2007 </li></ul></ul>
  2. 2. Cos’è una build <ul><li>L’insieme di TUTTI i passaggi necessari per creare un prodotto software </li></ul><ul><ul><li>non solo una compilazione… </li></ul></ul>
  3. 3. Input <ul><li>Sorgenti </li></ul><ul><ul><li>Java </li></ul></ul><ul><ul><li>multi-linguaggio (C/C++, scripts...)‏ </li></ul></ul><ul><li>File di configurazione </li></ul><ul><ul><li>properties, XML </li></ul></ul><ul><li>Risorse </li></ul><ul><ul><li>immagini </li></ul></ul><ul><ul><li>testo </li></ul></ul><ul><ul><li>… </li></ul></ul>
  4. 4. Output <ul><li>Eseguibili / librerie </li></ul><ul><ul><li>jar / exe / dll </li></ul></ul><ul><li>Documentazione </li></ul><ul><ul><li>javadoc, doxygen, xdoc </li></ul></ul><ul><li>Installers </li></ul><ul><ul><li>jar, msi, xpi ... </li></ul></ul><ul><li>Source Package </li></ul><ul><ul><li>zip </li></ul></ul>
  5. 5. Perché automatizzarla? <ul><li>Test-Driven Development </li></ul><ul><li>Continuous Integration </li></ul><ul><ul><li>Build Early, Build Often </li></ul></ul><ul><ul><li>il costo di integrazione è esponenziale rispetto al tempo dall’ultima integrazione </li></ul></ul><ul><li>E soprattutto… </li></ul><ul><li>Don’t Repeat Yourself ( DRY principle )‏ </li></ul><ul><ul><li>per risparmiare tempo </li></ul></ul><ul><ul><li>per fare meno errori </li></ul></ul>
  6. 6. Step 1: Version Control <ul><li>Gestire i sorgenti in un repository che contiene TUTTI i file necessari </li></ul><ul><ul><li>SOLO quelli!? </li></ul></ul><ul><ul><li>CVS, SVN, altri </li></ul></ul><ul><li>Problema: gestione dipendenze esterne </li></ul><ul><ul><li>Approccio “tutto nel repository” </li></ul></ul><ul><ul><ul><li>svn externals </li></ul></ul></ul><ul><ul><li>Approccio “gestione automatica” </li></ul></ul><ul><ul><ul><li>maven </li></ul></ul></ul>
  7. 7. Step 2: Build definition <ul><li>Un file di configurazione deve specificare tutti i passi necessari </li></ul><ul><li>Un motore di build lo utilizza per coordinare tutti gli altri tool </li></ul><ul><ul><ul><li>makefile </li></ul></ul></ul><ul><ul><ul><li>ant </li></ul></ul></ul><ul><ul><ul><li>maven </li></ul></ul></ul><ul><ul><ul><li>rake </li></ul></ul></ul><ul><ul><li>Script custom (es shell, python)‏ </li></ul></ul>
  8. 8. Step 3: Build server <ul><li>Periodicamente, </li></ul><ul><ul><li>scarica i sorgenti aggiornati dal repository </li></ul></ul><ul><ul><li>esegue la build </li></ul></ul><ul><ul><li>esegue eventuali test </li></ul></ul><ul><ul><li>produce report e/o statistiche </li></ul></ul><ul><ul><li>archivia i risultati </li></ul></ul><ul><ul><li>notifica gli sviluppatori dei risultati (es. blame )‏ </li></ul></ul>
  9. 9. Un esempio con Hudson <ul><li>Build server scritto in Java </li></ul><ul><ul><li>https://hudson.dev.java.net </li></ul></ul><ul><li>Praticamente non richiede installazione </li></ul><ul><ul><li>https://hudson.dev.java.net/hudson.jnlp </li></ul></ul><ul><li>Molto semplice da usare </li></ul><ul><li>Potente </li></ul><ul><li>Ottimo supporto </li></ul>
  10. 10. Feature avanzate <ul><li>Generazione automatica della documentaz. </li></ul><ul><li>Pubblicazione automatica dela webapp su un sito di test </li></ul><ul><li>Build su cluster di macchine </li></ul><ul><li>Compilazione codice C/C++ </li></ul><ul><ul><li>http://www. martinfowler .com/articles/ ciWithCom .html </li></ul></ul><ul><li>Monitoraggio di processi di amministrazione </li></ul><ul><ul><li>es. backup/mirror siti web </li></ul></ul>
  11. 11. Vantaggi <ul><li>Verifica immediata problemi </li></ul><ul><ul><li>dipendenze </li></ul></ul><ul><ul><li>configurazioni </li></ul></ul><ul><ul><li>errori banali </li></ul></ul><ul><li>Ripetibilità </li></ul><ul><ul><li>ricostruzione sorgenti legati a una build </li></ul></ul><ul><li>Velocità di integrazione e di testing </li></ul><ul><li>Analisi informazioni </li></ul>
  12. 12. Altri server <ul><li>http://damagecontrol.codehaus.org/Continuous+Integration+Server+Feature+Matrix </li></ul><ul><li>http:// cruisecontrol . sf .net/ </li></ul><ul><ul><li>il primo… </li></ul></ul><ul><li>http://maven.apache.org/continuum/ </li></ul><ul><ul><li>focalizzato su MAVEN </li></ul></ul><ul><ul><li>potente ma UI difficile da usare </li></ul></ul><ul><li>http://www. atlassian .com/software/bamboo/ </li></ul><ul><ul><li>commerciale </li></ul></ul>
  13. 13. Altri riferimenti <ul><li>L’ Articolo su Continuous Integration </li></ul><ul><ul><li>http://www.martinfowler.com/articles/ continuousIntegration.html </li></ul></ul><ul><li>Wikipedia </li></ul><ul><ul><li>http://en.wikipedia.org/wiki/ Continuous_Integration </li></ul></ul><ul><li>http://www.carlobonamico.com </li></ul>

×