Ο Jenkins είναι ο κορυφαίος εξυπηρετητής αυτοματοποίησης ανοικτού κώδικα, ο οποίος παρέχει εκατοντάδες plugins για την υποστήριξη της κατασκευής, διάταξης και αυτοματοποίησης οποιοδήποτε έργου λογισμικού, διευκολύνοντας την συνεχή ενοποίηση και συνεχή παράδοση (continuous integration & continuous delivery – CI/CD) του. Υποστηρίζει διάφορα εργαλεία ελέγχου εκδόσεων όπως CVS, Subversion & Git ενώ μπορεί να τρέξει έργα βασιζόμενα σε Apache Ant, Apache Maven και sbt καθώς και οποιοδήποτε shell script (πρόγραμμα κελύφους) και εντολή παρτίδας (batch command) των Windows.

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

  • CI/CD: Ως ένας επεκτάσιμος εξυπηρετητής αυτοματοποίησης, ο Jenkins μπορεί να χρησιμοποιηθεί ως ένας απλό εξυπηρετητής συνεχής ενοποίησης ή να μετατραπεί σε ένα κεντρικό σημείο συνεχούς παράδοσης για οποιοδήποτε έργο λογισμικού
  • Εύκολη εγκατάσταση: ο Jenkins είναι ένα αυτό-περιεχόμενο (self-contained) πρόγραμμα Java, έτοιμο να εκτελεστεί άμεσα (out-of-the-box), πακεταρισμένο για οποιοδήποτε λειτουργικό σύστημα
  • Εύκολη διαμόρφωση: ο Jenkins μπορεί εύκολα να διαμορφωθεί μέσω της διεπαφής χρήσης ιστού του (web interface), η οποία περιλαμβάνει την λειτουργικότητα άμεσου ελέγχου λαθών (on-the-fly error checking) και ενσωματωμένης βοήθειας
  • Plugins: Με εκατοντάδες plugins στο Κέντρο Ανανέωσής του (Update Center), ο Jenkins μπορεί να ενοποιηθεί πρακτικά με οποιοδήποτε εργαλείο στην αλυσίδα εργαλείων CI/CD
  • Επεκτάσιμος: ο Jenkins μπορεί να επεκταθεί μέσω της αρχιτεκτονικής plugin του, παρέχοντας σχεδόν άπειρες πιθανότητες σε σχέση με τι μπορεί να κάνει
  • Κατανεμημένος: ο Jenkins μπορεί εύκολα να κατανέμει εργασία κατά μήκος πολλαπλών μηχανών, βοηθώντας στην γρήγορη κατασκευή, δοκιμή και διάταξη λογισμικού κατά μήκος πολλαπλών πλατφορμών.

Η χρήση του Jenkins αντικατοπτρίζεται σε μια σειρά από σενάρια χρήσης, τα οποία έχουν συλλεχθεί εδώ: https://www.jenkins.io/solutions/. Εμείς θα επικεντρωθούμε σε 2 βασικά σενάρια που είναι σχετικά με τα 2 προγράμματα του ΕΠΤΑ που αφορούν το προγραμματισμό στο υπολογιστικό νέφος:

  • Συνδυασμός Jenkins με Docker, μια μηχανή διαχείρισης containers (δοχείων) και εικόνων containers: Αυτό το σενάριο αφορά δύο κατευθύνσεις. Στην πρώτη κατεύθυνση, η Docker μπορεί να χρησιμοποιηθεί για την εγκατάσταση ενός δοχείου Jenkins σε ένα οποιοδήποτε περιβάλλον, είτε αυτό είναι επιτόπιο ή υπολογιστικού νέφους. Μέσω αυτής της εγκατάστασης, είναι δυνατή η χρήση του Jenkins, πχ. δια μέσου της διεπαφής χρήσης ιστού του ώστε να διαμορφωθεί κατάλληλα και να χρησιμοποιηθεί για την υποστήριξη CI/CD ενός έργου λογισμικού. Στην δεύτερη κατεύθυνση, ο Jenkins μπορεί να χρησιμοποιηθεί, με βάση ένα Dockerfile, για την δημιουργία και αποθήκευση μιας εικόνας δοχείου (σε ένα αποθετήριο εικόνων) που αντιστοιχεί σε ένα κομμάτι λογισμικού. Η δημιουργημένη εικόνα δοχείου μπορεί έπειτα μέσω μιας μηχανής Docker να εγκατασταθεί οπουδήποτε (είτε σε επιτόπια είτε σε περιβάλλοντα νέφους).
  • Αγωγός ως κώδικας (Pipeline as code): Ιστορικά, το προκαθορισμένο μοντέλο αλληλεπίδρασης με τον Jenkins ήταν οδηγούμενο μέσω διεπαφής χρήσης ιστού, απαιτώντας από τους χρήστες να δημιουργήσουν εργασίες (jobs) και να συμπληρώσουν όλες τις λεπτομέρειες για αυτές χειρωνακτικά. Αυτό απαιτούσε περισσότερη προσπάθεια όσον αφορά την δημιουργία και διαχείριση εργασιών για την δοκιμή και κατασκευή πολλαπλών έργων ενώ διατηρούσε την διαμόρφωση μια εργασίας (κατασκευής/δοκιμής/διάταξης) ξεχωριστή σε σχέση με τον αντίστοιχο κώδικα (που έπρεπε να κατασκευαστεί/δοκιμαστεί/διαταχθεί). Αυτό εμπόδιζε τους χρήστες να εφαρμόσουν τις υπάρχουσες CI/CD καλές πρακτικές τους και στην διαμόρφωση εργασιών. Με την εισαγωγή του plugin Pipeline, οι χρήστες τώρα μπορούν να υλοποιήσουν ολόκληρο τον αγωγό κατασκευής/δοκιμής/διάταξης ενός έργου σε ένα μόνο Jenkinsfile και να το αποθηκεύσουν δίπλα στον κώδικά τους. Με αυτό τον τρόπο, ο αγωγός αποτελεί πια ένα ακόμη κομμάτι κώδικα που μπορεί να εισαχθεί στον πηγαίο έλεγχο (source control).

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

D4Science. Για την προώθηση των πρακτικών ανοικτής επιστήμης και την υποστήριξη επιστημονικών κοινοτήτων παράλληλα με την εξυπηρέτηση 11 χιλιάδων εγγεγραμμένων χρηστών από 45 χώρες, η D4Science εισήγαγε ένα νέο αγωγό παράδοσης που αντικατέστησε την προυπάρχουσα πλατφόρμα κατασκευής της (build platform). Το ζητούμενο ήταν πως έπρεπε να κατασκευάσει και να δημοσιεύσει το πλαίσιο λογισμικού της (gCube) με ένα τρόπο που να υποστηρίζει πολλαπλές εκδόσεις έργων σε κλίμακα – 200+ Git αποθετήρια (κώδικα) μέσα σε μια μέρα. Συνεπώς, έπρεπε να πραγματοποιηθεί η αυτοματοποίηση όλων των δραστηριοτήτων παραγωγής εκδόσεων και να παραδοθούν γρήγορα αυξητικές εκδόσεις για την αντιμετώπιση των απαιτήσεων χρηστών. Επιπλέον, η λύση έπρεπε να είναι αποτελεσματική ως προς το κόστος. Οπότε, η D4Science, μέσω του Jenkins, δημιούργησε μια νεωτεριστική προσέγγιση για την παράδοση λογισμικού: έναν αγωγό CI/CD που είναι κλιμακώσιμος, εύκολος στην διατήρηση και αναβαθμίσιμος με ένα ελάχιστο κόστος.

Gainsight. Η πλατφόρμα πελατειακής εμπειρίας υπηρεσιών της Gainsight υποστηρίζει διάφορες ομάδες επιτυχίας πελατών (customer success) σε πάνω από 100 κορυφαίους επιχειρήσεις ΤΠΕ και ιατρικής φροντίδας. Αυτό το επιτυγχάνει οδηγώντας την σύμπλεξη (engagement) για δεκάδες χιλιάδες από τους πελάτες των επιχειρήσεων αυτών. Για αυτό το λόγο, η ομάδα μηχανικής στην Gainsight προσέγγισε την εμπειρία πελατών μέσω της κατασκευής μιας έξυπνης, γρήγορης και ασφαλούς πλατφόρμα DevOps χρησιμοποιώντας τον Jenkins. Επέλεξαν μια προσέγγιση υποδομής ως κώδικα (infrastructure as code) ενώ ενοποίησαν διάφορα εργαλεία και προγραμματιστικές γλώσσες στην πλατφόρμα αυτή. Επίσης, προστάτευσαν τις αντίστοιχες διαδικασίες με καλύτερη ορατότητα (visibility) και με αυστηρό έλεγχο ποιότητας. Η υποδομή πλατφόρμας DevOps που παρήχθηκε είναι ευέλικτη ενώ το 95% από αυτήν είναι κλιμακώσιμο με κώδικα. Επίσης, το κόστος υποδομής είναι 40% λιγότερο. Αυτό παρέχει στην Gainsight διευκόλυνση συνεργασιών, εντατική εσωτερική γνώση λειτουργίας και, λόγω του γεγονότος πως οι κατασκευές είναι 30% γρηγορότερες, την ικανότητα να βρίσκεται μπροστά από τον ανταγωνισμό.

Πηγές:

Pin It on Pinterest