Προγραμματισμός

Συνεχής ενσωμάτωση με τον Hudson

Η συνεχής ενσωμάτωση έχει γίνει κοινή πρακτική για ομάδες που επικεντρώνονται στη διασφάλιση της ποιότητας του κώδικα καθ 'όλη τη διάρκεια ζωής του λογισμικού. Σε αυτό το άρθρο, ο Nicholas Whitehead παρουσιάζει τον Hudson, έναν δημοφιλή διακομιστή ανοιχτού κώδικα CI. Μάθετε πώς να ρυθμίσετε έναν διακομιστή Hudson στο περιβάλλον ανάπτυξης εφαρμογών σας (παρατίθενται παραδείγματα για Windows XP με Tomcat 6 ή Ubuntu Linux με JBoss AS), λάβετε μια επισκόπηση των πολλών επιλογών διαμόρφωσης που παρέχει το Hudson και, στη συνέχεια, εφαρμόστε μια αυτόματη έκδοση, δοκιμή, και διαδικασία αναφοράς για ένα παράδειγμα έργου. Επίπεδο: Αρχάριος

Συνεχής ενσωμάτωση (CI) είναι ένα σύνολο πρακτικών που αποσκοπούν στη διευκόλυνση και τη σταθεροποίηση της διαδικασίας δημιουργίας εκδόσεων λογισμικού. Το CI βοηθά τις ομάδες ανάπτυξης με τις ακόλουθες προκλήσεις:

  • Αυτοματισμός δημιουργίας λογισμικού: Με το CI, μπορείτε να ξεκινήσετε τη διαδικασία δημιουργίας ενός τεχνουργήματος λογισμικού με το πάτημα ενός κουμπιού, σε ένα προκαθορισμένο πρόγραμμα ή σε απάντηση σε ένα καθορισμένο συμβάν. Εάν θέλετε να δημιουργήσετε ένα τεχνούργημα λογισμικού από την πηγή, η διαδικασία δημιουργίας σας δεν δεσμεύεται σε συγκεκριμένο IDE, υπολογιστή ή άτομο.
  • Συνεχής αυτοματοποιημένη επαλήθευση έκδοσης: Ένα σύστημα CI μπορεί να διαμορφωθεί έτσι ώστε να εκτελεί συνεχώς εκδόσεις καθώς ο νέος ή τροποποιημένος πηγαίος κώδικας είναι ενεργοποιημένος. Αυτό σημαίνει ότι ενώ μια ομάδα προγραμματιστών λογισμικού ελέγχει περιοδικά σε νέο ή τροποποιημένο κώδικα, το σύστημα CI επαληθεύει συνεχώς ότι η κατασκευή δεν έχει διακοπεί από τον νέο κωδικό. Αυτό μειώνει την ανάγκη για προγραμματιστές να ελέγχουν ο ένας τον άλλον σχετικά με αλλαγές σε αλληλοεξαρτώμενα στοιχεία.
  • Συνεχής αυτοματοποιημένη δοκιμή κατασκευής: Μια επέκταση της επαλήθευσης έκδοσης, αυτή η διαδικασία διασφαλίζει ότι ο νέος ή τροποποιημένος κώδικας δεν προκαλεί αποτυχία μιας σειράς προκαθορισμένων δοκιμών στα ενσωματωμένα αντικείμενα. Τόσο στην επαλήθευση έκδοσης όσο και στον έλεγχο, οι αστοχίες μπορούν να προκαλέσουν ειδοποιήσεις στα ενδιαφερόμενα μέρη, υποδεικνύοντας ότι μια έκδοση ή ορισμένες δοκιμές έχουν αποτύχει.
  • Αυτοματοποίηση διαδικασίας μετά την κατασκευή: Ο κύκλος ζωής κατασκευής ενός τεχνουργήματος λογισμικού μπορεί επίσης να απαιτεί πρόσθετες εργασίες που μπορούν να αυτοματοποιηθούν μόλις ολοκληρωθεί η επαλήθευση και οι δοκιμές κατασκευής, όπως δημιουργία τεκμηρίωσης, συσκευασία του λογισμικού και ανάπτυξη των αντικειμένων σε περιβάλλον λειτουργίας ή σε αποθετήριο λογισμικού. Με αυτόν τον τρόπο τα αντικείμενα μπορούν να διατεθούν γρήγορα στους χρήστες.

Για να εφαρμόσετε έναν διακομιστή CI χρειάζεστε, τουλάχιστον, έναν προσβάσιμο χώρο αποθήκευσης πηγαίου κώδικα (και τον πηγαίο κώδικα σε αυτό), ένα σύνολο σεναρίων και διαδικασιών κατασκευής και μια σειρά δοκιμών για εκτέλεση ενάντια στα ενσωματωμένα αντικείμενα. Το σχήμα 1 περιγράφει τη βασική δομή ενός συστήματος CI.

Τα στοιχεία του συστήματος μπαίνουν στο παιχνίδι με την ακόλουθη σειρά:

  1. Οι προγραμματιστές ελέγχουν νέο και τροποποιημένο κώδικα στο αποθετήριο πηγαίου κώδικα.
  2. Ο διακομιστής CI δημιουργεί έναν ειδικό χώρο εργασίας για κάθε έργο. Όταν ζητείται ή προγραμματίζεται μια νέα έκδοση, η πηγή ανακτάται από το αποθετήριο σε αυτόν τον χώρο εργασίας, όπου εκτελείται η έκδοση.
  3. Ο διακομιστής CI εκτελεί τη διαδικασία δημιουργίας στον πρόσφατα δημιουργημένο ή ανανεωμένο χώρο εργασίας.
  4. Μόλις ολοκληρωθεί η κατασκευή, ο διακομιστής CI μπορεί προαιρετικά να καλέσει την καθορισμένη σουίτα δοκιμής στα νέα αντικείμενα. Εάν η έκδοση αποτύχει, τα εγγεγραμμένα άτομα μπορούν να ειδοποιηθούν μέσω email, άμεσων μηνυμάτων ή κάποιας άλλης μεθόδου.
  5. Εάν η έκδοση είναι επιτυχής, τα τεχνουργήματα συσκευάζονται και μεταδίδονται σε έναν στόχο ανάπτυξης (όπως ένας διακομιστής εφαρμογών) ή / και αποθηκεύονται ως ένα νέο εκδοθέν τεχνούργημα σε ένα αποθετήριο λογισμικού. Αυτό το αποθετήριο μπορεί να είναι μέρος του διακομιστή CI ή μπορεί να είναι εξωτερικό αποθετήριο, όπως διακομιστής αρχείων ή ιστότοπος διανομής λογισμικού όπως το Java.net ή το SourceForge. Το αποθετήριο πηγαίου κώδικα και το αποθετήριο αντικειμένων μπορεί να είναι ξεχωριστά και είναι πραγματικά δυνατό να χρησιμοποιηθούν ορισμένοι διακομιστές CI χωρίς κανένα επίσημο σύστημα ελέγχου πηγής.
  6. Οι διακομιστές CI έχουν συνήθως κάποιο είδος κονσόλας όπου τα έργα μπορούν να διαμορφωθούν και να διορθωθούν, και όπου μπορούν να εκδοθούν αιτήματα για λειτουργίες όπως άμεσες εκδόσεις ad hoc, δημιουργία αναφορών ή ανάκτηση ενσωματωμένων τεχνουργημάτων.

Hudson: Ένας διακομιστής συνεχούς ενοποίησης

Η συνεχής ολοκλήρωση έχει γίνει δημοφιλής τα τελευταία χρόνια και σήμερα έχετε αρκετούς διακομιστές CI για να διαλέξετε, τόσο εμπορικούς όσο και δωρεάν. Προσωπικά είχα χρησιμοποιήσει τέσσερις διακομιστές CI προτού ένας συνάδελφος να συστήσει να κοιτάξω τον Hudson. Εντυπωσιάστηκα αμέσως από αυτό. Ενώ αρχικά υπέθεσα ότι ο Hudson δεν ήταν γνωστός, μια έρευνα στον ιστότοπο Java Power Tools τον δείχνει ως τον πιο ευρέως χρησιμοποιούμενο διακομιστή CI μεταξύ των ερωτηθέντων, συγκεντρώνοντας (κατά τη στιγμή αυτής της γραφής) το 37,8% όλων των ψήφων.

Υποστηριζόμενα SCM

Το Hudson έχει ενσωματωμένη υποστήριξη για το Subversion αμέσως, και απαιτείται μόνο ένας μικρός όγκος διαμόρφωσης για ενσωμάτωση με το CVS, με την προϋπόθεση ότι ο πελάτης CVS είναι εγκατεστημένος στον κεντρικό υπολογιστή του Hudson. Πολλές άλλες λύσεις διαχείρισης πηγαίου κώδικα (SCM) υποστηρίζονται με τη μορφή προσθηκών Hudson. Τη στιγμή αυτής της γραφής, υποστηρίζονται τα ακόλουθα SCM:

  • Accurev
  • BitKeeper
  • ClearCase
  • Γκιτ
  • Αστατος
  • Αναγκαστικά
  • StartTeam
  • Διακομιστής Team Foundation
  • Visual SourceSafe
  • URL SCM (μια ειδική προσθήκη SCM που επιτρέπει τη χρήση διευθύνσεων URL για SCM)

Σε αυτό το άρθρο, θα χρησιμοποιώ το Subversion και το αποθετήριο πηγής στο Java.net, οπότε δεν θα χρειαστεί να εγκαταστήσετε κανένα από αυτά τα πρόσθετα. (Ως άκρη, γνωρίζω κάποιον που εργάζεται σε μια προσθήκη MKS SourceIntegrity Hudson. Εάν σας ενδιαφέρει, στείλτε μου ένα email.)

Το Hudson είναι ένα προϊόν δωρεάν και ανοιχτού κώδικα που φιλοξενείται στο Java.net Αρχικά γράφτηκε από τον Kohsuke Kawaguchi, μηχανικό προσωπικού της Sun Microsystems, ο οποίος ανακοίνωσε την κυκλοφορία του στο blog του τον Φεβρουάριο του 2005. Από τότε ο Hudson είχε περίπου 154 κυκλοφορίες.

Εδώ είναι μερικοί από τους λόγους για τους οποίους μου αρέσει ο Hudson και γιατί θα το συνιστούσα, εκτός από τυχόν ασυνήθιστες απαιτήσεις:

  • Από όλα τα προϊόντα CI που έχω χρησιμοποιήσει, είναι μακράν το πιο εύκολο να εγκαταστήσετε και να διαμορφώσετε.
  • Οι διεπαφές χρήστη που βασίζονται στον Ιστό είναι πολύ φιλικές, διαισθητικές και ανταποκρίνονται, σε πολλές περιπτώσεις παρέχοντας άμεση ανατροφοδότηση με δυνατότητα Ajax σε μεμονωμένα πεδία διαμόρφωσης.
  • Το Hudson βασίζεται σε Java (το οποίο είναι χρήσιμο αν είστε προγραμματιστής Java) αλλά δεν περιορίζεται στη δημιουργία λογισμικού που βασίζεται σε Java.
  • Το Hudson είναι καθαρά κατασκευασμένο και προσφέρει ένα καλά καθορισμένο και τεκμηριωμένο API επεκτασιμότητας με τη μορφή πρόσθετων Hudson. Αυτό με τη σειρά του οδήγησε σε μια μεγάλη βιβλιοθήκη προσθηκών Hudson που επεκτείνει τη λειτουργικότητα του διακομιστή. Αυτά διατίθενται ελεύθερα και μπορούν να εγκατασταθούν από την κονσόλα Hudson.

Εγκατάσταση του Hudson: Windows XP ή Ubuntu Linux

Για να χρησιμοποιήσετε το Hudson, θα χρειαστείτε ένα προσβάσιμο και υποστηριζόμενο σύστημα ελέγχου πηγής (ανατρέξτε στην πλαϊνή γραμμή "Υποστηριζόμενα SCM" για μια λίστα), πηγή που μπορεί να ενσωματωθεί σε ένα τεχνούργημα και ένα σενάριο build που λειτουργεί. Πέρα από αυτό, το μόνο που χρειάζεστε πραγματικά για να εγκαταστήσετε και να διαμορφώσετε έναν λειτουργικό διακομιστή Hudson είναι μια εγκατάσταση Java, έκδοση 1.5 ή παραπάνω και το αρχείο εγκατάστασης Hudson, το οποίο διατίθεται με τη μορφή αρχείου Java EE Web (WAR). Μπορείτε να ξεκινήσετε τον διακομιστή πολύ απλά χρησιμοποιώντας την ακόλουθη γραμμή εντολών:

C: \ hudson> java -jar hudson.war

Είναι μάλλον πιο κοινό, ωστόσο, να αναπτύξουμε το Hudson σε ένα κοντέινερ servlet Java που βασίζεται στις προδιαγραφές Servlet 2.4 και JSP 2.0, όπως GlassFish, Tomcat, JBoss ή Jetty. Στις επόμενες ενότητες, θα σας καθοδηγήσω σε δύο σενάρια εγκατάστασης Hudson: ένα χρησιμοποιώντας το Tomcat 6 στα Windows XP και ένα άλλο χρησιμοποιώντας το JBoss 4.2.3 στο Ubuntu Linux (Το JBoss AS 5.0 κυκλοφόρησε μετά την ημερομηνία υποβολής αυτού του άρθρου.)

Εγκατάσταση του Hudson: Tomcat 6 και Windows XP

Θα υποθέσω ότι έχετε ήδη εγκατεστημένη την έκδοση 1.5 ή νεότερη έκδοση Java στο μηχάνημα των Windows XP. Ακολουθώντας τα παρακάτω βήματα θα εγκαταστήσετε το Tomcat 6.0.18 χρησιμοποιώντας το Windows Service Installer, έτσι ώστε το Hudson να ξεκινά αμέσως μετά την εκκίνηση των Windows XP και θα εκτελείται στο παρασκήνιο ακόμα και όταν δεν υπάρχει χρήστης. Το αρχείο λήψης για το Tomcat είναι apache-tomcat- 6.0.18.exe, το οποίο πρέπει να εκτελέσετε για να ξεκινήσετε την εγκατάσταση του Tomcat.

Η εγκατάσταση του Tomcat θα σας ζητήσει να κάνετε επιλογές εγκατάστασης. Βεβαιωθείτε ότι έχετε επιλέξει Εθιμο επιλογές και μετά Υπηρεσία, όπως φαίνεται στο Σχήμα 2, έτσι ώστε το Tomcat να λειτουργεί ως υπηρεσία.

Στη συνέχεια, επιλέξτε έναν κατάλογο στον οποίο θέλετε να εγκαταστήσετε το Tomcat, όπως φαίνεται στο Σχήμα 3. Συνιστώ ανεπιφύλακτα να επιλέξετε έναν κατάλογο χωρίς κενά. Μπορείτε να με ευχαριστήσετε αργότερα.

Τώρα το πρόγραμμα εγκατάστασης θα σας ρωτήσει σε ποια θύρα θέλετε να ακούσετε. Η προεπιλογή είναι η θύρα 8080, η οποία είναι πιθανώς μια χαρά. απλώς βεβαιωθείτε ότι δεν έχετε άλλη εφαρμογή χρησιμοποιώντας αυτήν τη θύρα. Εάν το κάνετε, το Tomcat δεν θα ξεκινήσει σωστά. Θα σας ζητηθεί επίσης να δώσετε ένα όνομα χρήστη και κωδικό πρόσβασης διαχειριστή Tomcat. Όλα αυτά φαίνονται στο Σχήμα 4.

Στη συνέχεια, το πρόγραμμα εγκατάστασης θα σας ζητήσει να δώσετε τη θέση του Java JRE που έχετε εγκαταστήσει. Όπως μπορείτε να δείτε στο σχήμα 5, χρησιμοποίησα το Sun Java 1.6.0_07.

Μόλις κάνετε κλικ Εγκαθιστώ, η εγκατάσταση θα πρέπει να ολοκληρωθεί και η υπηρεσία θα ξεκινήσει να λειτουργεί. Μπορείτε να βεβαιωθείτε ότι το Tomcat λειτουργεί σωστά, δείχνοντας το πρόγραμμα περιήγησής σας στο // localhost: 8080 (αντικαθιστώντας το κατάλληλο όνομα ή διεύθυνση IP για το localhost εάν δεν χρησιμοποιείτε πρόγραμμα περιήγησης Web που εκτελείται στον υπολογιστή όπου είναι εγκατεστημένο το Tomcat). Η ιστοσελίδα που εμφανίζεται πρέπει να μοιάζει με το στιγμιότυπο οθόνης στο Σχήμα 6.

Τώρα, για να εγκαταστήσετε το Hudson, αντιγράψτε το αρχείο hudson.war στον υποκατάλογο webapps του καταλόγου εγκατάστασης Tomcat. Εάν χρησιμοποιήσατε τον ίδιο κατάλογο εγκατάστασης που φαίνεται στο Σχήμα 3, αυτό θα ήταν C: \ Tomcat6 \ webapps. Το Tomcat θα αναπτύξει θερμά αρχεία WAR, αλλά το πιο εύκολο πράγμα που πρέπει να κάνετε τώρα είναι να κάνετε επανεκκίνηση του Tomcat. Υπάρχουν δύο τρόποι για να το κάνετε αυτό. Το πρώτο είναι να ανοίξετε ένα κέλυφος DOS και να εισαγάγετε τις ακόλουθες εντολές:

 C: \ Tomcat6> καθαρή στάση Tomcat6 C: \ Tomcat6> καθαρή εκκίνηση Tomcat6

Η δεύτερη επιλογή είναι να ανοίξετε το applet Services. Αυτή η μικροεφαρμογή βρίσκεται στην ομάδα Εργαλεία διαχείρισης στον Πίνακα Ελέγχου, η οποία μπορεί να βρεθεί κάνοντας κλικ στο κουμπί Έναρξη στη γραμμή εργαλείων των Windows και, στη συνέχεια, επιλέγοντας Ρυθμίσεις και μετά Πίνακας Ελέγχου. Στο applet Services, εντοπίστε την υπηρεσία που ονομάζεται Apache Tomcat και μετά κάντε κλικ στο Επανεκκίνηση κουμπί. Αυτό απεικονίζεται στο σχήμα 7.

Το Hudson πρέπει τώρα να εγκατασταθεί. Μπορείτε να το επαληθεύσετε δείχνοντας το πρόγραμμα περιήγησής σας στο // localhost: 8080 / hudson. Η κύρια οθόνη Hudson φαίνεται στο σχήμα 8.

Αυτό είναι το μόνο που υπάρχει! Εάν είστε άνετοι με ένα περιβάλλον ανάπτυξης εφαρμογών που βασίζεται στα Windows XP και το Tomcat, είστε έτοιμοι. Εάν προτιμάτε ένα σύστημα που τρέχει JBoss και Ubuntu Linux, διαβάστε παρακάτω.

Εγκατάσταση του Hudson: JBoss 4.2.3 στο Ubuntu Linux 8.04 (Hardy Heron)

Για να εγκαταστήσετε το Sun Java 1.6 στο Ubuntu, ανοίξτε ένα κέλυφος και εκτελέστε την ακόλουθη εντολή:

 sudo apt-get εγκαταστήστε sun-java6-jdk

Κατά την έκδοση α sudo εντολή, θα σας ζητηθεί να εισαγάγετε τον κωδικό πρόσβασής σας.

Σημειώστε ότι υπάρχουν διάφοροι τρόποι εγκατάστασης του JBoss. στην τεχνική που περιγράφεται εδώ, θα δημιουργήσετε ένα ειδικό μπρος χρήστης. Αυτό θεωρείται βέλτιστη πρακτική και είναι προτιμότερο να εγκαταστήσετε το JBoss στον δικό σας αρχικό κατάλογο. Η διαδικασία που περιγράφεται εδώ συνοψίστηκε από μια χρήσιμη περιγραφή στα φόρουμ του Ubuntu.

Αρχικά, πρέπει να κατεβάσετε το πακέτο JBoss 4.2.3.GA. Αναζητήστε το αρχείο με το όνομα jboss-4.2.3.GA.zip.

Στη συνέχεια, θα χρειαστεί να δημιουργήσετε έναν χρήστη, έναν αρχικό κατάλογο και μια ομάδα, όλα τα ονόματα μπρος. Η ομάδα είναι μια ευκολία που δεν διερευνάται σε αυτό το άρθρο. Θα σας επιτρέψει να επεκτείνετε τα δικαιώματα JBoss σε άλλους χρήστες του διακομιστή σας Ubuntu.

Η Λίστα 1 εμφανίζει τις σχολιασμένες εντολές για τη δημιουργία του μπρος αρχικός κατάλογος, χρήστης και ομάδα και, στη συνέχεια, εγκαταστήστε τον διακομιστή JBoss. Ορισμένες εντολές προτίθενται με sudo επειδή είναι εντολές με δικαιώματα root.

Λίστα 1. Δημιουργία λογαριασμού jboss και εγκατάσταση του διακομιστή

echo Δημιουργήστε την ομάδα jboss sudo groupadd jboss echo Δημιουργήστε τον χρήστη jboss, ορίστε το bash ως το προεπιλεγμένο κέλυφος του χρήστη και / home / jboss ως τον αρχικό κατάλογο ηχώ και κάντε τον χρήστη jboss μέρος της ομάδας jboss sudo useradd -s / bin / bash d / home / jboss -m -g jboss jboss echo Αντιγράψτε το αρχείο jboss-4.2.3.GA στο / home / jboss ή πραγματοποιήστε λήψη απευθείας σε αυτόν τον κατάλογο sudo mv jboss-4.2.3.GA / home / jboss echo Αλλάξτε τον κάτοχο του αρχείου στο jboss sudo chown jboss: jboss /home/jboss/jboss-4.2.3.GA echo Συνδεθείτε στον λογαριασμό jboss sudo su jboss echo Μεταβείτε στον αρχικό κατάλογο jboss cd ~ echo Αποσυμπιέστε το αρχείο jboss-4.2.3. GA unzip jboss-4.2.3.GA echo Δημιουργήστε έναν συμβολικό σύνδεσμο "jboss" για το "jboss-4.2.3.GA". echo Αυτό σας επιτρέπει να αλλάξετε εκδόσεις JBoss με ελάχιστες αλλαγές ln -s jboss-4.2.3 .GA jboss

Εάν η εντολή αποσυμπίεσης δεν είναι ήδη εγκατεστημένη, εισαγάγετε την ακόλουθη εντολή (ενώ είστε συνδεδεμένοι ως χρήστης με δυνατότητα sudo) για να την εγκαταστήσετε:

Sudo apt-get εγκατάσταση αποσυμπιέστε

Ο διακομιστής JBoss είναι πλέον βασικά εγκατεστημένος. Θα μπορούσατε να ξεκινήσετε τον διακομιστή χρησιμοποιώντας την ακόλουθη εντολή:

/home/jboss/jboss/bin/run.sh

Ωστόσο, σε αυτό το παράδειγμα, θα εγκαταστήσετε ένα σενάριο αυτόματης εκκίνησης έτσι ώστε η υπηρεσία να ξεκινά αυτόματα όταν ξεκινά ο κεντρικός υπολογιστής. Η λήψη του JBoss συνοδεύεται από τρία διαφορετικά σενάρια int.d, αλλά κάθε ένα πρέπει να τροποποιηθεί. μπορείτε να κατεβάσετε το σενάριο jboss-init.sh, το οποίο θα επιτρέψει την αυτόματη έναρξη και διακοπή του διακομιστή. Στη συνέχεια, εκτελέστε τις εντολές που εμφανίζονται στην καταχώριση 2.