Wednesday, March 23, 2011

Continuous Integration – Συνεχής Ολοκλήρωση

Θα μπορούσα να αναφέρω δεκάδες τεχνικούς και επιστημονικούς ορισμούς για τη σημασία της συνεχής ολοκλήρωσης και τη θέση που κατέχει ανάμεσα στις agile πρακτικές. Για παράδειγμα, ένας αρκετά απλουστευμένος όρος, είναι: «Οι ενέργειες που γίνονται από τους developers σε καθημερινά τακτά χρονικά διαστήματα ώστε οι αλλαγές που κάνουν στο λογισμικό να ενοποιούνται / ολοκληρώνονται με το υπόλοιπο λογισμικό αυτοματοποιημένα και γρήγορα». Θεωρώ, ωστόσο, ότι πέρα από τους τεχνικούς όρους, η εφαρμογή μιας τέτοιας πρακτικής από μία ομάδα ανάπτυξης λογισμικού στηρίζεται στην κουλτούρα ότι από την πρώτη (1η) ημέρα ενός project  / προϊόντος αυτό θεωρείται ένα ζωντανό και παραγωγικό σύστημα το οποίο βρίσκεται σε πλήρη χρήση από τους τελικούς χειριστές. Αντί, δηλαδή να αντιμετωπίζεται η εγκατάσταση του συστήματος ως ένα γεγονός στο μακρινό και αβέβαιο μέλλον, υιοθετείται η αντίληψη ότι είναι ήδη σε παραγωγική λειτουργία και οι συμπεριφορές της ομάδας προσαρμόζονται ανάλογα.
Άνθρωποι, σαν κι εμένα, παθιασμένοι με τις agile πρακτικές είναι λάτρεις της παραπάνω προσέγγισης διότι αναγνωρίζουμε ότι ένα σύστημα στη διάρκεια της ζωής του θα περάσει πολλές παραπάνω ώρες σε παραγωγική λειτουργία παρά σε διαδικασία ανάπτυξης. Η ομάδα, εξάλλου, συνηθίζει πολύ γρήγορα στην ιδέα ότι όλες οι αλλαγές στον κώδικα γίνονται σε ένα πλήρως παραγωγικό περιβάλλον.
Η υιοθέτηση και η τήρηση, ωστόσο, μίας κουλτούρας παραγωγικής ετοιμότητας δεν είναι εύκολη και απαιτεί κάποιες «θυσίες». Χρειάζεται καταρχάς απόλυτη πειθαρχία, από όλα τα μέλη της ομάδας σε συγκεκριμένες ενέργειες από την πρώτη ημέρα έναρξης του project. Επιπρόσθετα, δε θα είναι λίγες οι φορές που μπροστά στο βωμό της τήρησης των χρονοδιαγραμμάτων η ομάδα θα βρεθεί στον πειρασμό να καθυστερήσει την επένδυση σε ποιοτικό και παραγωγικό λογισμικό. Όσοι όμως καταφέρουν και επενδύσουν στην κατεύθυνση αυτή, θα μπορούν να απολαμβάνουν συστήματα, εύκολα στην εγκατάσταση, στα οποία μπορούν να κάνουν αλλαγές χωρίς φόβο, και θα είναι σε θέση να απαντούν άμεσα στις ανάγκες των πελατών τους γρηγορότερα από τον ανταγωνισμό.
Η συνεχής ολοκλήρωση, λοιπόν, είναι μία agile πρακτική που βοηθάει τις ομάδες λογισμικού να πετύχουν τα παραπάνω.


Τι χρειάζεται όμως για να εφαρμοστεί ένα σύστημα συνεχής ολοκλήρωσης; Δεν αρκούν μόνο τα εργαλεία ή μόνο οι άνθρωποι. Είναι από τις agile πρακτικές που και τα δύο πρέπει να δέσουν αρμονικά για το βέλτιστο αποτέλεσμα. Συνοπτικά παρουσιάζονται τα απαραίτητα συστατικά για να «δέσει το γλυκό».

  • Ένα Source Code Repository : Ένα κεντρικό σημείο (μία μεγάλη δεξαμενή) στο οποίο τηρείται ο κώδικας μαζί με όλο το ιστορικό του, τις αλλαγές που έχουν γίνει, πότε και από ποιον, και φυσικά ποιο project αφορούν. 
  • Μία σωστά ορισμένη διαδικασία check-in (commit) : Είναι η διαδικασία που πρέπει να τηρείται πριν την οριστικοποίηση των αλλαγών από κάθε developer. Ένα τυπικό παράδειγμα φαίνεται στο παρακάτω σχήμα 

  • Μία αυτοματοποιημένη διαδικασία build (αυτόματη δημιουργία δηλαδή εκτελέσιμου συστήματος – αυτό που θα πάρουν οι τελικοί χειριστές) : Αποτελεί τη ραχοκοκαλιά της συνεχούς ολοκλήρωσης. Ένα σωστά ορισμένο αυτοματοποιημένο build πρέπει να μεταγλωττίζει τον κώδικα (compile), να εκτελεί όλα τα tests και βασικά να κάνει ότι θα έκανε χειροκίνητα ο αρμόδιος developer για να παράγει το τελικό εκτελέσιμο. Το κλειδί είναι η ελαχιστοποίηση της εμπλοκής του ανθρώπινου παράγοντα. Όσο λιγότερο εμπλέκονται οι άνθρωποι σε αυτή τη διαδικασία τόσο το καλύτερο. Εξίσου σημαντική είναι η ταχύτητα. Δεδομένου ότι το αυτοματοποιημένο build θα «τρέχει» πολλές φορές την ημέρα θα πρέπει να μη διαρκεί πάνω από δέκα (10) λεπτά ή πάνω από πέντε(5) για μικρά projects.

  • H προθυμία και η δέσμευση της ομάδας να δουλεύει σε μικρά κομμάτια: Αποτελεί τον πιο κρίσιμο παράγοντα για την επιτυχημένη εφαρμογή της συνεχής ολοκλήρωσης και χωρίς αυτή όλα τα παραπάνω είναι ανούσια. Αυτό σημαίνει με απλά λόγια ότι ο κάθε developer δεν περιμένει να οριστικοποιήσει τις αλλαγές του στο τέλος κάθε ημέρας ή ακόμα χειρότερα στο τέλος της εβδομάδας. Κάθε μικρή, αξιοποιήσιμη και ελεγμένη αλλαγή χρειάζεται να οριστικοποιείται (commit) άμεσα για να απολαμβάνει η ομάδα όλα τα θετικά της συνεχής ολοκλήρωσης.



Ποια είναι όμως τα οφέλη της συνεχής ολοκλήρωσης στους συναδέλφους που δεν ανήκουν στην ομάδα ανάπτυξης και πως αυτή μπορεί να αξιοποιηθεί από έναν οργανισμό; Ενδεικτικά αναφέρω τα πιο εμφανή και σημαντικά:
  • Όλοι οι ενδιαφερόμενοι μπορούν να γνωρίζουν ποια ζητήματα (issues) έχουν αντιμετωπιστεί σε ποιο build. 
  • Όλοι οι ενδιαφερόμενοι έχουν εικόνα για την ποιότητα και τα αποτελέσματα των ελέγχων που υπάρχουν σε ένα σύστημα, καθώς και για πλήθος ποιοτικών αποτελεσμάτων.
  • Πάντα υπάρχει διαθέσιμη, μία σταθερή έκδοση για έλεγχο, προς επίδειξη σε πελάτες, χωρίς να χρειάζεται η παρέμβαση της ομάδας ανάπτυξης, όποτε προκύπτει ανάλογη ανάγκη
  • Αυξάνεται το αίσθημα ασφάλειας και σιγουριάς απέναντι στο προϊόν εφόσον υπάρχει διαφάνεια στις αυτοματοποιημένες διαδικασίες ανάπτυξης και ελέγχου του συστήματος.

Σε επόμενα Blog θα αναφερθώ στις πολλές δυνατότητες επέκτασης της συνεχής ολοκλήρωσης αλλά και σε άλλες agile πρακτικές.

0 comments:

Post a Comment