Πώς να αναπτύξετε την εφαρμογή Cloud Foundry με (σχεδόν) μηδενικό φόβο χρησιμοποιώντας το Travis CI

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

Πρόσφατα προσχώρησα σε μια νέα ομάδα στην εργασία που ανέπτυξε εφαρμογές node.js Cloud Foundry στο IBM Cloud χρησιμοποιώντας το Travis με τον πάροχο ανάπτυξης του Bluemix CloudFoundry. Αυτό λειτουργεί ιδανικά για γρήγορη και εύκολη ρύθμιση της ανάπτυξης σας με λίγες μόνο παραμέτρους.

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

Με την τεχνική ανάπτυξης μπλε-πράσινου, η τρέχουσα εφαρμογή σας (μπλε) συνεχίζει να εκτελεί και να λαμβάνει κίνηση στο δίκτυο. Ενώ ο νέος σας κωδικός εφαρμογής (πράσινο) αναπτύσσεται σε μια προσωρινή διαδρομή. Η νέα εφαρμογή Green μπορεί να επικυρωθεί στην προσωρινή διαδρομή. Εάν υπάρχουν προβλήματα, η ανάπτυξη σταματά. Η εφαρμογή Blue συνεχίζει να εξυπηρετεί την κυκλοφορία χωρίς διακοπή. Μόλις ελεγχθεί η πράσινη εφαρμογή, ο δρομολογητής ενημερώνεται για να δείχνει στην πράσινη εφαρμογή. Το μπλε μπορεί να σταματήσει.

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

Άρχισα αμέσως να ψάχνω για έναν τρόπο με το μπλε-πράσινο να αναπτύξουμε τις εφαρμογές μας. Για να γράψω όσο το δυνατόν λιγότερο προσαρμοσμένο κώδικα, αποφάσισα να αξιοποιήσω το πρόσθετο cf-blue-green-deploy για τη διεπαφή γραμμής εντολών Cloud Foundry (CLI). Θα μοιραστώ πώς το έκανα εδώ.

Θα υποθέσω ότι αν προσγειωθήκατε εδώ μάλλον ξεπερνάτε το σημείο απλώς «να ξεκινήσετε» με τον Travis. Δεν θα καλύψω αυτές τις λεπτομέρειες εδώ.

Εάν δεν σας ενδιαφέρει να ακολουθήσετε και θέλετε απλώς να μεταβείτε απευθείας στα προϊόντα, μπορείτε να κλωνοποιήσετε το δείγμα εργασίας μου από το GitHub.

Εγκατάσταση του CF CLI και του μπλε-πράσινου plugin

Δεδομένου ότι δεν χρησιμοποιούμε τον πάροχο ανάπτυξης Cloud Foundry, πρέπει να εγκαταστήσουμε οι ίδιοι το Cloud Foundry CLI, καθώς και το μπλε-πράσινο plugin ανάπτυξης. Μπορούμε να το κάνουμε αυτό στη before_deployφάση του κύκλου ζωής του Travis build.

Σημειώστε ότι η before_deployφάση εκτελείται πριν από κάθε πάροχο ανάπτυξης. Εάν κάνετε πρόσθετα πράγματα στη φάση ανάπτυξης, ίσως θελήσετε να μετακινήσετε αυτά τα βήματα στη after_successφάση (η οποία εκτελείται μόλις μία φορά μετά από μια επιτυχημένη έκδοση) για να αποφύγετε περιττές επιπλέον εγκαταστάσεις. Θα μπορούσατε επίσης να μετακινήσετε αυτά τα βήματα στο ίδιο το script ανάπτυξης, το οποίο θα γράψουμε στη συνέχεια.

Ανεξάρτητα από το πού το βάλετε, εδώ είναι το σενάριο:

- echo "Installing cf cli"- test x$TRAVIS_OS_NAME = "xlinux" && rel="linux64-binary" || rel="macosx64"; wget "//cli.run.pivotal.io/stable?release=${rel}&source=github" -qO cf.tgz && tar -zxvf cf.tgz && rm cf.tgz- export PATH="$PATH:."- cf --version
- echo "Installing cf blue-green deploy plugin"- cf add-plugin-repo CF-Community //plugins.cloudfoundry.org- cf install-plugin blue-green-deploy -r CF-Community -f

Η εντολή για την εγκατάσταση του CLI προέρχεται απευθείας από την πηγή CloudFoundry DPL. Οι εντολές για την εγκατάσταση του μπλε-πράσινου plugin προέρχονται από το README του plugin.

Επικαλούμενη την μπλε-πράσινη ανάπτυξη

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

deploy:# on update to master branch we deploy to Cloud Foundry- provider: script skip_cleanup: true script: ./scripts/cf-blue-green-deploy.sh blue-green-cf-travis manifest.yml prod on: branch: master

Σημειώστε ότι skip_cleanupέχει οριστεί σε true. Χωρίς αυτό, το cf CLI και το μπλε-πράσινο plugin ανάπτυξης που μόλις εγκαταστήσατε θα αφαιρεθούν πριν από την εκτέλεση της ανάπτυξης.

Το σενάριο cf-blue-green-deploy.sh συνδέεται στο Cloud Foundry API και επικαλείται το μπλε-πράσινο plugin ανάπτυξης. Εκτός από τον καθορισμό ενός ονόματος εφαρμογής και ενός αρχείου δήλωσης, μπορείτε επίσης να περάσετε ένα σενάριο δοκιμής καπνού στην προσθήκη ανάπτυξης μπλε-πράσινου. Η προσθήκη θα καλέσει το σενάριο δοκιμής καπνού μετά την ανάπτυξη του νέου κωδικού εφαρμογής, αλλά πριν αλλάξει η διαδρομή εφαρμογής στη νέα εφαρμογή. Αυτό σας επιτρέπει να εκτελέσετε οποιονδήποτε αριθμό δοκιμών έναντι του νέου κώδικα πριν από οποιαδήποτε πραγματική κυκλοφορία αποκτήσει πρόσβαση σε αυτόν.

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

Στο παράδειγμα του έργου μου, το σενάριο δοκιμής καπνού καλεί ένα API / έκδοση και επαληθεύει ότι επιστρέφει με έναν κωδικό κατάστασης 200.

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

Θα μπορούσατε προαιρετικά να εκτελέσετε μια πιο ολοκληρωμένη σειρά δοκιμών παλινδρόμησης ως after_deployβήμα, αφού ο νέος κώδικας σας είναι διαθέσιμος.

Παρενέργειες μιας μπλε-πράσινης ανάπτυξης στο IBM Cloud

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

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

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

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

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

Φυσικά, αυτή η προσέγγιση σημαίνει ότι δεν μπορείτε να επωφεληθείτε από το μπλε-πράσινο πρόγραμμα ανάπτυξης που περιγράφεται σε αυτήν την ανάρτηση και πρέπει να διατηρήσετε το δικό σας προσαρμοσμένο σενάριο.

Τυλίγοντας

Σε αυτήν την ανάρτηση, εξετάσαμε πώς μπορούμε να επιτύχουμε ανάπτυξη χαμηλού κινδύνου, μηδενικό χρόνο διακοπής λειτουργίας χρησιμοποιώντας το Travis και την προσθήκη cf blue-green.

Σε ένα πραγματικό έργο, θα είχαμε ακόμη μεγαλύτερες διαβεβαιώσεις, καθώς θα είχαμε μια σειρά από δοκιμές μονάδας και λάθη εκεί θα αποτύγχανε την κατασκευή του Travis πριν η ανάπτυξη είχε την ευκαιρία να εκτελεστεί. Θα μπορούσαμε επίσης να έχουμε διαμορφωμένους κλάδους dev και staging ώστε να αναπτύσσονται στους αντίστοιχους χώρους τους στον οργανισμό Cloud Foundry, επιτρέποντάς μας να επικυρώσουμε και να σταθεροποιήσουμε την εφαρμογή όπως απαιτείται πριν προωθήσουμε αλλαγές στην παραγωγή.

Ευχαριστώ για την ανάγνωση! Αυτή είναι η πρώτη μου μεσαία ιστορία και ελπίζω να τη βρήκατε χρήσιμη.