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

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

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

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

Με συνεχή ενσωμάτωση θα μπορούσαμε να εντοπίσουμε σφάλματα πιο γρήγορα και να κυκλοφορήσουμε κώδικα πολύ πιο γρήγορα από ό, τι κάναμε τα προηγούμενα χρόνια. Δεν είναι υπερβολή να πούμε ότι η CI εξημέρωσε την πλευρά "build" του κύκλου κατασκευής και ανάπτυξης. Αυτές τις μέρες πολλές ομάδες dev έχουν μετακινηθεί πέρα ​​από το CI σε CD, που σημαίνει είτε συνεχή παράδοση είτε συνεχή ανάπτυξη. Όποια και αν είναι η ονομασία, το CD είναι μια διαδικασία που μετακινεί το λογισμικό από το check-in κώδικα σε στάδια, ή ακόμα και σε παραγωγές.

Αυτή η δόση του Έργα Java ανοιχτού κώδικα εισάγει συνεχή ενοποίηση με τη Jenkins, έναν κορυφαίο διακομιστή αυτοματισμού για CI / CD. Θα ξεκινήσουμε με μια επισκόπηση της διαδικασίας CI και CD και, στη συνέχεια, θα δημιουργήσουμε ένα έργο web Java χρησιμοποιώντας τους Maven και Jenkins. Θα μάθετε πώς να δημιουργείτε και να δοκιμάζετε μονάδες το έργο στο Jenkins με το JUnit, καθώς και πώς να αντιμετωπίζετε αποτυχίες κατασκευής. Θα εγκαταστήσετε και θα εκτελέσετε μερικές δημοφιλείς προσθήκες Jenkins για δοκιμές και αναφορές ανάλυσης στατικού κώδικα.

Εισαγωγή στο CI / CD

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

Πάρτε μια εφαρμογή Java που δημιουργήθηκε χρησιμοποιώντας το Maven ως παράδειγμα. Κατά τον εντοπισμό αλλαγών κώδικα, ο διακομιστής CI σας θα μπορούσε να ανταποκριθεί εκτελώντας ένα καθαρή εγκατάσταση mvn. Σε μια τυπική διαμόρφωση build Maven, θα εκτελούσε ένα νέο σύνολο δοκιμών μονάδας ως μέρος της εντολής build. Κατά την κατασκευή του πηγαίου κώδικα, ο διακομιστής θα μπορούσε να εκτελέσει οποιονδήποτε αριθμό πρόσθετων ενεργειών:

  • Συγχωνεύστε τον κλάδο λειτουργιών σας ξανά στον κύριο ή τον κύριο κλάδο μόλις ο δεσμευμένος κώδικας περάσει τον έλεγχο μονάδας.
  • Εκτελέστε ανάλυση στατικού κώδικα, όπως κάλυψη κώδικα, πολυπλοκότητα κώδικα, ελέγχους για κοινά σφάλματα κ.λπ.
  • Δημοσιεύστε τα τεχνουργήματά σας σε ένα αποθετήριο, όπως το Artifactory ή το Sonatype Nexus
  • Αναπτύξτε την εφαρμογή σας σε περιβάλλον δοκιμής ενοποίησης
  • Εκτελέστε δοκιμές ενοποίησης
  • Αναπτύξτε την εφαρμογή σας σε περιβάλλον δοκιμής απόδοσης
  • Εκτελέστε δοκιμή φόρτωσης στην εφαρμογή σας
  • Αναπτύξτε την αίτησή σας σε περιβάλλον δοκιμής αποδοχής χρήστη (UAT)
  • Αναπτύξτε την εφαρμογή σας στην παραγωγή

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

Η συνεχής ενσωμάτωση γίνεται συνήθως χρησιμοποιώντας ένα εργαλείο όπως το Jenkins, το Bamboo ή το TeamCity, το οποίο ενορχηστρώνει τα βήματα κατασκευής σας σε έναν αγωγό ενοποίησης. Η Jenkins είναι ίσως το πιο δημοφιλές προϊόν CI / CD και συνδυάζεται καλά με το Docker.

Λήψη και εγκατάσταση του Jenkins

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

Υπάρχουν πολλοί τρόποι για να τρέξετε το Jenkins:

  1. Κατεβάστε ένα αρχείο WAR και εγκαταστήστε το σε ένα servlet container στον τοπικό υπολογιστή σας.
  2. Ρυθμίστε μια εικονική μηχανή σε ένα δημόσιο σύννεφο όπως το AWS και φιλοξενήστε τη Jenkins εκεί.
  3. Αξιοποιήστε έναν παροχέα cloud της Jenkins όπως το CloudBees.
  4. Ρυθμίστε τον Jenkins σε μια δοκιμαστική εγκατάσταση χρησιμοποιώντας το Docker.

Θα σας δείξω πώς να ρυθμίσετε τόσο την τοπική εγκατάσταση όσο και την εγκατάσταση δοκιμής Docker.

Πραγματοποιήστε λήψη και εγκατάσταση του Jenkins τοπικά

Ξεκινήστε κατεβάζοντας το Jenkins και επιλέγοντας την έκδοση μακροπρόθεσμης υποστήριξης (LTS) από την αρχική σελίδα του Jenkins. Επειδή είμαι σε Mac, η εγκατάσταση έλαβε αυτόματα ένα pkg αρχείο, το οποίο τοποθέτησε ένα jenkins.war στο δικό μου Εφαρμογή / Jenkins ντοσιέ. Το αρχείο WAR μπορεί να αναπτυχθεί σε οποιοδήποτε κοντέινερ servlet.

Θα θελήσετε επίσης να κάνετε λήψη και εγκατάσταση του Apache Tomcat. Από αυτήν την περίοδο, η πιο πρόσφατη έκδοση του Tomcat είναι 8.5.4, αλλά θα πρέπει να μπορείτε να εκτελέσετε οποιαδήποτε πρόσφατη έκδοση. Κατεβάστε το φερμουάρ ή tar.gz αρχείο και αποσυμπίεση στο σκληρό σας δίσκο. Αντιγράψτε το αρχείο jenkins.war στο Tomcat's διαδικτυακές εφαρμογές φάκελο και, στη συνέχεια, εκτελέστε το bin / startup.sh ή bin / startup.bat αρχείο. Μπορείτε να ελέγξετε ότι εκτελείται ανοίγοντας το πρόγραμμα περιήγησής σας σε: // localhost: 8080.

Για να ξεκινήσετε το Jenkins, ανοίξτε ένα πρόγραμμα περιήγησης στη διεύθυνση URL: // localhost: 8080 / jenkins.

Θα πρέπει να λάβετε μια οθόνη που μοιάζει με το Σχήμα 1.

Στίβεν Χάινς

Στη συνέχεια, ο Jenkins δημιουργεί έναν κωδικό πρόσβασης διαχείρισης και το γράφει τόσο στον Tomcat's logs / catalina.out αρχείο καταγραφής και στον ακόλουθο αρχικό κατάλογο: .jenkins / μυστικά / initialAdminPassword. Ανακτήστε τον κωδικό πρόσβασης, εισαγάγετέ τον στο στοιχείο φόρμας Κωδικός διαχείρισης (φαίνεται στην Εικόνα 1) και πατήστε Να συνεχίσει. Θα σας ζητηθεί είτε να εγκαταστήσετε προτεινόμενα πρόσθετα είτε να επιλέξετε πρόσθετα για εγκατάσταση. Προς το παρόν προτείνω την εγκατάσταση των προτεινόμενων προσθηκών.

Τώρα θα σας ζητηθεί να δημιουργήσετε έναν χρήστη διαχειριστή. Εισαγάγετε τα στοιχεία χρήστη διαχειριστή και πατήστε Αποθήκευση και ολοκλήρωση. Τέλος, κάντε κλικ στο Ξεκινήστε να χρησιμοποιείτε το Jenkins. Θα δείτε τώρα την αρχική σελίδα του Jenkins, όπως φαίνεται στο Σχήμα 2.

Στίβεν Χάινς

Διαμορφώστε την εφαρμογή παραδείγματος με το Maven

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

Από τον πίνακα ελέγχου Jenkins, κάντε κλικ στο Διαχείριση Jenkins και επιλέξτε Καθολική διαμόρφωση εργαλείου. Το πρώτο πράγμα που θα κάνουμε είναι να διαμορφώσουμε ένα JDK. Στην ενότητα JDK, κάντε κλικ στο Προσθήκη JDK, δώστε το ένα όνομα (το δικό μου είναι "JDK8") και αφήστε το προεπιλεγμένο Εγκαταστήστε από το java.sun.com τετραγωνισμένος. Αποδεχτείτε τη συμφωνία άδειας χρήσης της Oracle και, στη συνέχεια, κάντε κλικ στο σύνδεσμο "Εισαγάγετε το όνομα χρήστη / κωδικό πρόσβασης". Εισαγάγετε το όνομα χρήστη και τον κωδικό πρόσβασης της Oracle και πατήστε Κλείσε. Θα εμφανιστεί μια οθόνη παρόμοια με το Σχήμα 3.

Στίβεν Χάινς

Κάντε κλικ Ισχύουν για να αποθηκεύσετε την εργασία σας και, στη συνέχεια, μετακινηθείτε προς τα κάτω στην ενότητα Maven και κάντε κλικ στο Προσθέστε τον Maven. Εισαγάγετε ένα όνομα για το Maven (το δικό μου είναι "Maven 3.3.9"), αφήστε το "Install Automatically" και το "Install from Apache" επιλεγμένο. Κάντε κλικ Σώσει όταν είσαι έτοιμος. Θα πρέπει να εμφανιστεί μια οθόνη παρόμοια με το Σχήμα 4.

Στίβεν Χάινς

Το Git έρχεται προρυθμισμένο με τον Jenkins, οπότε τώρα θα πρέπει να έχετε όλα τα εργαλεία εγκατεστημένα που χρειάζεστε για να κάνετε checkout και να δημιουργήσετε ένα έργο Java από το Git with Maven.

Εγκαταστήστε το Jenkins σε ένα κοντέινερ Docker

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

Εγκατάσταση του Docker

Δείτε την εισαγωγή μου στο Docker για έναν οδηγό για αρχάριους στο Docker, συμπεριλαμβανομένων των οδηγιών εγκατάστασης και εγκατάστασης.

Υποθέτοντας ότι έχετε ήδη ρυθμίσει το Docker στο περιβάλλον ανάπτυξης, μπορείτε να εκκινήσετε τον Jenkins από το Docker στη γραμμή εντολών:

 docker run -p 8080: 8080 -p 50000: 50000 -v / your / home / jenkins: / var / jenkins_home -d jenkins 

Αυτή η εντολή λέει στο Docker να εκτελέσει την τελευταία έκδοση του Τζένκινς με τις ακόλουθες επιλογές:

  • -p 8080: 8080: Θύρα χαρτών 8080 στο κοντέινερ Docker στη θύρα 8080 στον κεντρικό υπολογιστή Docker, ώστε να μπορείτε να συνδεθείτε στην εφαρμογή web Jenkins στη θύρα 8080.
  • -p 50000: 50000: Θύρα χαρτών 50000 στο κοντέινερ Docker στη θύρα 50000 στο κεντρικό υπολογιστή Docker. Η Jenkins χρησιμοποιεί αυτήν τη θύρα εσωτερικά για να επιτρέψει στους εκτελεστές σκλάβων build να συνδεθούν στον κύριο διακομιστή Jenkins.
  • -v / σας / σπίτι / jenkins: / var / jenkins_home: Αποθήκευση δεδομένων Maps Jenkins στον τοπικό σας κατάλογο, ώστε να μπορείτε να κάνετε επανεκκίνηση του κοντέινερ Docker χωρίς να χάσετε τα δεδομένα σας.
  • -ρε: Σας επιτρέπει να εκτελέσετε το κοντέινερ Docker σε αποσπασμένη λειτουργία ή ως διαδικασία δαίμονα.

Το παρακάτω δείχνει την έξοδο για την εκτέλεση αυτών των εντολών:

 $ docker run -p 8000: 8080 -v / Users / shaines / jenkins /: / var / jenkins_home -d jenkins cc16573ce71ae424d4122e9e4afd3a294fda6606e0333838fe332fc4e11d0d53 

Επειδή τρέχουμε το κοντέινερ Docker σε αποσυνδεμένη λειτουργία, πρέπει να ακολουθήσουμε τα αρχεία καταγραφής που εξάγονται από τη Jenkins. Μπορείτε να το κάνετε με το αρχεία καταγραφής docker -f εντολή. Απλώς περάστε τους πρώτους δεκαεξαδικούς αριθμούς του αναγνωριστικού κοντέινερ, σε αυτήν την περίπτωση cc16573ce71ae424d4122e9e4afd3a294fda6606e0333838fe332fc4e11d0d53:

 $ docker logs -f cc1 Εκτελείται από: /usr/share/jenkins/jenkins.war webroot: EnvVars.masterEnvVars.get ("JENKINS_HOME") ... **************** ********************************************* ***** ************************************************** ****** ******************************************** ***************** Απαιτείται η αρχική ρύθμιση της Jenkins. Δημιουργήθηκε χρήστης διαχειριστή και δημιουργήθηκε κωδικός πρόσβασης. Χρησιμοποιήστε τον ακόλουθο κωδικό πρόσβασης για να προχωρήσετε στην εγκατάσταση: 205be6fe69c447dd933a3c9ce7420496 Αυτός μπορεί επίσης να βρεθεί στη διεύθυνση: / var / jenkins_home / secret / initialAdminPassword ************************ ************************************* ************* ************************************************ ** ************************************************** ********* 

Ρύθμιση Jenkins CI για μια εφαρμογή ιστού Java

Στη συνέχεια θα δημιουργήσουμε μια απλή εργασία εφαρμογών ιστού Java στο Jenkins. Επειδή η εφαρμογή δεν είναι σημαντική για αυτό το σεμινάριο, θα χρησιμοποιήσουμε την απλή μου εφαρμογή Hello, World Servlet, την οποία φιλοξένησα στο GitHub.

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

Στίβεν Χάινς

Θα επιλέξουμε τον τύπο έργου Freestyle για αυτό το έργο, αλλά θα πρέπει να γνωρίζετε τις επιλογές σας:

  • Freestyle project: Αυτός ο πιο συνηθισμένος τύπος έργου σάς επιτρέπει να παρακολουθείτε ένα αποθετήριο πηγαίου κώδικα και να χρησιμοποιείτε οποιοδήποτε σύστημα κατασκευής, όπως το Maven και το Ant.
  • Αγωγός: Επιλέξτε αυτόν τον τύπο έργου για περίπλοκα έργα με κινούμενα μέρη που πρέπει να συντονίσετε σε πολλούς σκλάβους build.
  • Εξωτερική εργασία: Χρησιμοποιήστε το για να διαμορφώσετε μια αυτοματοποιημένη εξωτερική εργασία που θέλετε να παρακολουθήσετε στο Jenkins ως μέρος της κατασκευής σας.
  • Έργο πολλαπλών ρυθμίσεων: Αυτός είναι ο τύπος εργασίας για έργα που απαιτούν διαφορετικές διαμορφώσεις για διαφορετικά περιβάλλοντα, όπως παραγωγή, στάση και δοκιμή.
  • Φάκελος: Όταν έχετε μια περίπλοκη έκδοση τότε ίσως θέλετε να οργανώσετε τα πράγματα σε φακέλους, ο καθένας με τον δικό του ξεχωριστό χώρο ονομάτων.
  • Αγωγός πολλαπλών κλάδων: δημιουργήστε αυτόματα ένα σύνολο έργων αγωγών, με βάση τους κλάδους κώδικα που ορίζονται στο αποθετήριο πηγαίου κώδικα

Εισαγάγετε ένα όνομα έργου, σε αυτήν την περίπτωση "hello-world-servlet" και επιλέξτε "OK". Στη συνέχεια, επιλέξτε Έργο GitHubκαι, στη συνέχεια, εισαγάγετε τη διεύθυνση URL του GitHub του έργου σας: //github.com/ligado/hello-world-servlet.

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

Στην ενότητα Build Triggers, επιλέξτε Δημιουργήστε όταν προωθηθεί μια αλλαγή στο GitHub έτσι ώστε η Jenkins να δημιουργήσει τον κωδικό σας όποτε κάνετε αλλαγή στο GitHub.

Στην ενότητα Build, προσθέστε ένα νέο βήμα build, επιλέξτε Επικαλέστε στόχους ανώτατου επιπέδου Maven, επιλέξτε την παρουσία Maven που διαμορφώσατε προηγουμένως (όπως "Maven 3.3.9") και εισάγετε καθαρή εγκατάσταση στο πεδίο των στόχων. Αφήστε τις ενέργειες μετά την κατασκευή άδειες για τώρα. Όταν τελειώσετε, πατήστε Σώσει.

Όταν επιστρέψετε στο ταμπλό θα πρέπει να δείτε μια οθόνη παρόμοια με την Εικόνα 6

Στίβεν Χάινς

Για να ελέγξετε τη διαμόρφωσή σας, πατήστε το Δημιουργήστε τώρα κουμπί δίπλα στο έργο hello-world-servlet. Θα πρέπει να δείτε μια κατασκευή που εκτελέστηκε με επιτυχία στο Ιστορικό κατασκευής στην αριστερή πλευρά της σελίδας του έργου, όπως φαίνεται στο Σχήμα 7.

Στίβεν Χάινς

Για να δείτε ακριβώς τι συνέβη, κάντε κλικ στο build και μετά κάντε κλικ στο Έξοδος κονσόλας, το οποίο θα σας δείξει όλα τα βήματα που έκανε η Jenkins και τα αποτελέσματά τους. Η έξοδος της κονσόλας είναι παρακάτω.

$config[zx-auto] not found$config[zx-overlay] not found