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

Τι είναι το CI / CD; Η συνεχής ολοκλήρωση και η συνεχής παράδοση εξηγούνται

Η συνεχής ολοκλήρωση (CI) και η συνεχής παράδοση (CD) ενσωματώνουν μια κουλτούρα, ένα σύνολο αρχών λειτουργίας και μια συλλογή πρακτικών που επιτρέπουν στις ομάδες ανάπτυξης εφαρμογών να παρέχουν αλλαγές κώδικα πιο συχνά και αξιόπιστα. Η εφαρμογή είναι επίσης γνωστή ως CI / CD αγωγός.

Το CI / CD είναι μια από τις βέλτιστες πρακτικές που μπορούν να εφαρμόσουν οι ομάδες devops. Είναι επίσης μια ευέλικτη βέλτιστη πρακτική μεθοδολογίας, καθώς επιτρέπει στις ομάδες ανάπτυξης λογισμικού να επικεντρωθούν στην ικανοποίηση επιχειρηματικών απαιτήσεων, ποιότητας κώδικα και ασφάλειας, επειδή τα βήματα ανάπτυξης είναι αυτοματοποιημένα.

Ορίζεται CI / CD

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

Ο τεχνικός στόχος της CI είναι να καθιερώσει έναν συνεπή και αυτοματοποιημένο τρόπο κατασκευής, συσκευασίας και δοκιμών εφαρμογών. Με συνέπεια στη διαδικασία ενοποίησης, οι ομάδες είναι πιο πιθανό να κάνουν αλλαγές κώδικα πιο συχνά, γεγονός που οδηγεί σε καλύτερη συνεργασία και ποιότητα λογισμικού.

Συνεχής παράδοσηπαίρνει εκεί που τελειώνει η συνεχής ολοκλήρωση. Το CD αυτοματοποιεί την παράδοση εφαρμογών σε επιλεγμένα περιβάλλοντα υποδομής. Οι περισσότερες ομάδες συνεργάζονται με πολλαπλά περιβάλλοντα εκτός από την παραγωγή, όπως περιβάλλοντα ανάπτυξης και δοκιμών, και το CD διασφαλίζει ότι υπάρχει αυτοματοποιημένος τρόπος για να προωθήσετε αλλαγές κώδικα σε αυτές.

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

Απαιτείται συνεχής ολοκλήρωση και συνεχής παράδοσησυνεχείς δοκιμέςδιότι ο στόχος είναι η παροχή ποιοτικών εφαρμογών και κώδικα στους χρήστες. Η συνεχής δοκιμή εφαρμόζεται συχνά ως ένα σύνολο αυτοματοποιημένης παλινδρόμησης, απόδοσης και άλλων δοκιμών που εκτελούνται στον αγωγό CI / CD.

Μια ώριμη εξάσκηση CI / CD devops έχει την επιλογή να εφαρμόζει συνεχή ανάπτυξη όπου οι αλλαγές εφαρμογών εκτελούνται μέσω του αγωγού CI / CD και οι διερχόμενες κατασκευές αναπτύσσονται απευθείας σε περιβάλλοντα παραγωγής. Οι ομάδες που ασκούν συνεχή παράδοση επιλέγουν να αναπτυχθούν στην παραγωγή σε καθημερινό ή ακόμη και ωριαίο πρόγραμμα, αν και η συνεχής παράδοση δεν είναι πάντα η βέλτιστη για κάθε επιχειρηματική εφαρμογή.

Σχετικό βίντεο: Τρόπος παράδοσης κώδικα πιο γρήγορα με CI / CD

Το πώς η συνεχής ενσωμάτωση βελτιώνει τη συνεργασία και την ποιότητα

Η συνεχής ενσωμάτωση είναι μια φιλοσοφία ανάπτυξης που υποστηρίζεται από τη μηχανική της διαδικασίας και κάποια αυτοματοποίηση. Κατά την εξάσκηση του CI, οι προγραμματιστές δεσμεύουν τον κώδικά τους στο αποθετήριο ελέγχου έκδοσης συχνά και οι περισσότερες ομάδες έχουν ένα ελάχιστο πρότυπο δέσμευσης κώδικα τουλάχιστον καθημερινά. Το σκεπτικό πίσω από αυτό είναι ότι είναι ευκολότερο να εντοπίσουμε ελαττώματα και άλλα ζητήματα ποιότητας λογισμικού σε μικρότερες διαφορές κώδικα παρά μεγαλύτερες που αναπτύχθηκαν για εκτεταμένες χρονικές περιόδους. Επιπλέον, όταν οι προγραμματιστές εργάζονται σε μικρότερους κύκλους δεσμεύσεων, είναι λιγότερο πιθανό για πολλούς προγραμματιστές να επεξεργάζονται τον ίδιο κώδικα και να απαιτούν συγχώνευση κατά την εκτέλεση.

Οι ομάδες που εφαρμόζουν συνεχή ενοποίηση συχνά ξεκινούν με διαμόρφωση ελέγχου έκδοσης και ορισμούς πρακτικής. Παρόλο που ο έλεγχος του κώδικα γίνεται συχνά, οι λειτουργίες και οι επιδιορθώσεις εφαρμόζονται τόσο σε σύντομα όσο και σε μεγαλύτερα χρονικά διαστήματα. Οι ομάδες ανάπτυξης που ασκούν συνεχή ενσωμάτωση χρησιμοποιούν διαφορετικές τεχνικές για τον έλεγχο των χαρακτηριστικών και του κώδικα που είναι έτοιμα για παραγωγή.

Πολλές ομάδες χρησιμοποιούν χαρακτηριστικές σημαίες, ένας μηχανισμός διαμόρφωσης για ενεργοποίηση ή απενεργοποίηση λειτουργιών και κωδικών κατά το χρόνο εκτέλεσης. Οι δυνατότητες που βρίσκονται ακόμη υπό ανάπτυξη τυλίγονται με σημαίες χαρακτηριστικών στον κώδικα, αναπτύσσονται με τον κύριο κλάδο στην παραγωγή και απενεργοποιούνται μέχρι να είναι έτοιμες για χρήση. Σύμφωνα με μια πρόσφατη έρευνα, το 63% των ομάδων που χρησιμοποιούν σημαίες χαρακτηριστικών αναφέρουν καλύτερες δοκιμές και λογισμικό υψηλότερης ποιότητας. Δυνατότητα επισήμανσης εργαλείων όπως το CloudBees Rollout, το Optimizely Rollouts και το LaunchDarkly ενσωματώνονται με εργαλεία CI / CD και επιτρέπουν διαμορφώσεις σε επίπεδο λειτουργιών.

Μια άλλη τεχνική για τη διαχείριση χαρακτηριστικών είναιδιακλάδωση ελέγχου έκδοσης. Μια στρατηγική διακλάδωσης όπως το Gitflow επιλέγεται για να καθορίσει πρωτόκολλα σχετικά με το πώς ο νέος κώδικας συγχωνεύεται σε τυπικούς κλάδους για ανάπτυξη, δοκιμή και παραγωγή. Επιπλέον κλάδοι χαρακτηριστικών δημιουργούνται για αυτούς που θα διαρκέσουν περισσότερο κύκλους ανάπτυξης. Όταν ολοκληρωθεί η δυνατότητα, οι προγραμματιστές μπορούν στη συνέχεια να συγχωνεύσουν τις αλλαγές από τους κλάδους χαρακτηριστικών στον κύριο κλάδο ανάπτυξης. Αυτή η προσέγγιση λειτουργεί καλά, αλλά μπορεί να γίνει δύσκολο να διαχειριστεί εάν υπάρχουν πολλά χαρακτηριστικά που αναπτύσσονται ταυτόχρονα.

Στη συνέχεια, η ίδια η διαδικασία κατασκευής αυτοματοποιείται συσκευάζοντας όλο το λογισμικό, τη βάση δεδομένων και άλλα στοιχεία. Για παράδειγμα, εάν δημιουργούσατε μια εφαρμογή Java, το CI θα πακέτα όλων των στατικών αρχείων διακομιστή ιστού όπως HTML, CSS και JavaScript μαζί με την εφαρμογή Java και οποιαδήποτε σενάρια βάσης δεδομένων.

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

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

Οι συνεχείς δοκιμές υπερβαίνουν τον αυτοματοποιημένο έλεγχο

Τα αυτοματοποιημένα πλαίσια δοκιμών βοηθούν τους μηχανικούς διασφάλισης ποιότητας να καθορίσουν, να εκτελέσουν και να αυτοματοποιήσουν διάφορους τύπους δοκιμών που μπορούν να βοηθήσουν τις ομάδες ανάπτυξης να γνωρίζουν εάν μια έκδοση λογισμικού περνά ή αποτυγχάνει. Περιλαμβάνουν δοκιμές λειτουργικότητας που αναπτύσσονται στο τέλος κάθε σπριντ και συγκεντρώνονται σε α δοκιμή παλινδρόμησης για ολόκληρη την εφαρμογή. Αυτές οι δοκιμές παλινδρόμησης στη συνέχεια ενημερώνουν την ομάδα εάν μια αλλαγή κώδικα απέτυχε μία ή περισσότερες από τις δοκιμές που αναπτύχθηκαν σε όλες τις λειτουργικές περιοχές της εφαρμογής όπου υπάρχει κάλυψη δοκιμών.

Μια βέλτιστη πρακτική είναι να ενεργοποιήσετε και να απαιτήσετε από τους προγραμματιστές να εκτελέσουν όλα ή ένα υποσύνολο δοκιμών παλινδρόμησης στο τοπικό τους περιβάλλον. Αυτό το βήμα διασφαλίζει ότι οι προγραμματιστές δεσμεύουν κώδικα σε έλεγχο έκδοσης μόνο μετά την ολοκλήρωση των δοκιμών παλινδρόμησης.

Οι δοκιμές παλινδρόμησης είναι μόνο η αρχή. Οι δοκιμές απόδοσης, οι δοκιμές API, η ανάλυση στατικού κώδικα, οι δοκιμές ασφαλείας και άλλες φόρμες δοκιμών μπορούν επίσης να αυτοματοποιηθούν. Το κλειδί είναι να είναι σε θέση να ενεργοποιήσει αυτές τις δοκιμές είτε μέσω της γραμμής εντολών, του webhook ή της υπηρεσίας ιστού και ότι αποκρίνονται με επιτυχία ή αποτυγχάνουν κωδικούς κατάστασης.

Μόλις οι δοκιμές αυτοματοποιηθούν, οι συνεχείς δοκιμές υπονοούν ότι ο αυτοματισμός ενσωματώνεται στον αγωγό CI / CD. Ορισμένες δοκιμές μονάδας και λειτουργικότητας μπορούν να ενσωματωθούν σε CI που επισημαίνει ζητήματα πριν ή κατά τη διαδικασία ολοκλήρωσης. Οι δοκιμές που απαιτούν ένα πλήρες περιβάλλον παράδοσης, όπως οι επιδόσεις και οι δοκιμές ασφαλείας, ενσωματώνονται συχνά σε CD και εκτελούνται μετά την παράδοση των εκδόσεων σε περιβάλλοντα προορισμού.

Ο αγωγός CD αυτοματοποιεί αλλαγές σε πολλαπλά περιβάλλοντα

Η συνεχής παράδοση είναι ο αυτοματισμός που ωθεί τις εφαρμογές σε περιβάλλοντα παράδοσης. Οι περισσότερες ομάδες ανάπτυξης έχουν συνήθως ένα ή περισσότερα περιβάλλοντα ανάπτυξης και δοκιμών όπου οι αλλαγές εφαρμογών πραγματοποιούνται για δοκιμή και έλεγχο. Ένα εργαλείο CI / CD όπως Jenkins, CircleCI, AWS CodeBuild, Azure DevOps, Atlassian Bamboo ή Travis CI χρησιμοποιείται για την αυτοματοποίηση των βημάτων και την παροχή αναφορών.

Ένας τυπικός αγωγός CD έχει στάδια κατασκευής, δοκιμής και ανάπτυξης. Οι πιο εξελιγμένοι αγωγοί περιλαμβάνουν πολλά από αυτά τα βήματα:

  • Τράβηγμα κώδικα από τον έλεγχο έκδοσης και εκτέλεση μιας έκδοσης.
  • Εκτέλεση οποιωνδήποτε απαιτούμενων βημάτων υποδομής που είναι αυτοματοποιημένα ως κώδικας για ανάρτηση ή καταστροφή της υποδομής cloud.
  • Μετακίνηση κώδικα στο υπολογιστικό περιβάλλον προορισμού.
  • Διαχείριση των μεταβλητών περιβάλλοντος και διαμόρφωση τους για το περιβάλλον προορισμού.
  • Προώθηση στοιχείων εφαρμογής στις κατάλληλες υπηρεσίες τους, όπως διακομιστές ιστού, υπηρεσίες API και υπηρεσίες βάσης δεδομένων.
  • Εκτέλεση οποιωνδήποτε βημάτων που απαιτούνται για την επανεκκίνηση υπηρεσιών ή τελικών σημείων εξυπηρέτησης κλήσεων που απαιτούνται για νέες κινήσεις κώδικα.
  • Εκτελώντας συνεχείς δοκιμές και περιβάλλοντα επαναφοράς σε περίπτωση αποτυχίας των δοκιμών.
  • Παροχή δεδομένων καταγραφής και ειδοποιήσεων σχετικά με την κατάσταση της παράδοσης.

Για παράδειγμα, οι χρήστες της Jenkins ορίζουν τους αγωγούς τους σε ένα αρχείο Jenkinsfile που περιγράφει διαφορετικά στάδια όπως κατασκευή, δοκιμή και ανάπτυξη. Οι μεταβλητές περιβάλλοντος, οι επιλογές, τα μυστικά κλειδιά, οι πιστοποιήσεις και άλλες παράμετροι δηλώνονται στο αρχείο και στη συνέχεια αναφέρονται σε στάδια. Η ενότητα ανάρτησης χειρίζεται συνθήκες σφάλματος και ειδοποιήσεις.

Το πιο εξελιγμένο CD μπορεί να έχει άλλα βήματα, όπως εκτέλεση συγχρονισμού δεδομένων, αρχειοθέτηση πόρων πληροφοριών ή εκτέλεση εφαρμογών και ενημέρωσης βιβλιοθηκών. Τα εργαλεία CI / CD υποστηρίζουν συνήθως μια αγορά προσθηκών. Για παράδειγμα, η Jenkins παραθέτει περισσότερες από 1.500 προσθήκες που υποστηρίζουν ενοποίηση με τρίτες πλατφόρμες, διεπαφή χρήστη, διαχείριση, διαχείριση πηγαίου κώδικα και διαχείριση build.

Μόλις επιλεγεί ένα εργαλείο CI / CD, οι ομάδες ανάπτυξης πρέπει να διασφαλίσουν ότι όλες οι μεταβλητές περιβάλλοντος έχουν ρυθμιστεί εκτός της εφαρμογής. Τα εργαλεία CI / CD επιτρέπουν τον καθορισμό αυτών των μεταβλητών, την κάλυψη μεταβλητών όπως κωδικούς πρόσβασης και κλειδιά λογαριασμού και τη διαμόρφωσή τους τη στιγμή της ανάπτυξης για το περιβάλλον προορισμού.

Τα εργαλεία CD παρέχουν επίσης λειτουργίες ταμπλό και αναφορών. Εάν οι κατασκευές ή οι παραδόσεις αποτύχουν, ειδοποιούν τους προγραμματιστές με πληροφορίες σχετικά με τις αστοχίες. Ενσωματώνονται με εργαλεία ελέγχου εκδόσεων και ευκίνητα, ώστε να μπορούν να χρησιμοποιηθούν για να αναζητήσουν ποιες αλλαγές κώδικα και ιστορίες χρηστών συνθέτουν ένα build.

Εφαρμογή αγωγών CI / CD με αρχιτεκτονικές Kubernetes και χωρίς διακομιστές

Πολλές ομάδες που χρησιμοποιούν αγωγούς CI / CD σε περιβάλλοντα cloud χρησιμοποιούν επίσης κοντέινερ όπως Docker και συστήματα ενορχήστρωσης όπως το Kubernetes. Τα εμπορευματοκιβώτια επιτρέπουν εφαρμογές συσκευασίας και αποστολής με τυπικούς, φορητούς τρόπους. Τα κοντέινερ διευκολύνουν την κλιμάκωση ή την κατάρριψη περιβαλλόντων με μεταβλητό φόρτο εργασίας.

Υπάρχουν πολλές προσεγγίσεις για τη χρήση κοντέινερ, υποδομής ως κώδικα και αγωγών CI / CD μαζί. Μπορείτε να εξερευνήσετε τις επιλογές εργαζόμενοι μέσω σεμιναρίων όπως το Kubernetes with Jenkins ή το Kubernetes με το Azure DevOps.

Οι αρχιτεκτονικές υπολογιστών χωρίς διακομιστές παρουσιάζουν έναν άλλο δρόμο για ανάπτυξη και κλιμάκωση εφαρμογών. Σε περιβάλλον χωρίς διακομιστή, η υποδομή διαχειρίζεται πλήρως ο πάροχος υπηρεσιών cloud και η εφαρμογή καταναλώνει πόρους ανάλογα με τις ανάγκες βάσει της διαμόρφωσής της. Στο AWS, για παράδειγμα, εφαρμογές χωρίς διακομιστές εκτελούνται καθώς οι λειτουργίες Lambda και οι αναπτύξεις μπορούν να ενσωματωθούν σε έναν αγωγό Jenkins CI / CD με μια προσθήκη.

Το CI / CD επιτρέπει συχνότερες αναπτύξεις κώδικα

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

Οι αγωγοί CI / CD έχουν σχεδιαστεί για επιχειρήσεις που θέλουν να βελτιώνουν τις εφαρμογές συχνά και απαιτούν μια αξιόπιστη διαδικασία παράδοσης. Η πρόσθετη προσπάθεια τυποποίησης build, ανάπτυξης δοκιμών και αυτοματοποίησης αναπτύξεων είναι η διαδικασία κατασκευής για την ανάπτυξη αλλαγών κώδικα. Μόλις τεθεί σε εφαρμογή, επιτρέπει στις ομάδες να επικεντρωθούν στη διαδικασία βελτίωσης των εφαρμογών και λιγότερο στις λεπτομέρειες του συστήματος παράδοσής της σε υπολογιστικά περιβάλλοντα.

Το CI / CD είναι μια βέλτιστη πρακτική devops επειδή αντιμετωπίζει την κακή ευθυγράμμιση μεταξύ προγραμματιστών που θέλουν να προωθούν συχνά τις αλλαγές, με λειτουργίες που θέλουν σταθερές εφαρμογές. Με τον αυτοματισμό, οι προγραμματιστές μπορούν να προωθούν τις αλλαγές πιο συχνά. Οι ομάδες επιχειρήσεων βλέπουν μεγαλύτερη σταθερότητα επειδή τα περιβάλλοντα έχουν τυπικές διαμορφώσεις, υπάρχουν συνεχείς δοκιμές στη διαδικασία παράδοσης, οι μεταβλητές περιβάλλοντος διαχωρίζονται από την εφαρμογή και οι διαδικασίες επαναφοράς είναι αυτοματοποιημένες.

Ο αντίκτυπος της εφαρμογής αγωγών CI / CD μπορεί να μετρηθεί ως δείκτης απόδοσης κλειδιού devops (KPI). Οι KPI όπως η συχνότητα ανάπτυξης, ο χρόνος παράδοσης αλλαγής και ο μέσος χρόνος ανάκτησης (MTTR) από ένα συμβάν συχνά βελτιώνονται όταν εφαρμόζεται CI / CD με συνεχή δοκιμή. Ωστόσο, το CI / CD είναι μόνο μία διαδικασία που μπορεί να οδηγήσει σε αυτές τις βελτιώσεις και υπάρχουν και άλλες προϋποθέσεις για τη βελτίωση των συχνοτήτων ανάπτυξης.

Για να ξεκινήσετε με το CI / CD απαιτείται η ανάπτυξη ομάδων ανάπτυξης και επιχειρησιακών ομάδων σε τεχνολογίες, πρακτικές και προτεραιότητες. Οι ομάδες πρέπει να αναπτύξουν συναίνεση σχετικά με τις σωστές προσεγγίσεις για την επιχείρησή τους και τις τεχνολογίες τους, έτσι ώστε όταν τεθεί σε εφαρμογή το CI / CD, η ομάδα βρίσκεται εν πλω με τις ακόλουθες πρακτικές με συνέπεια.