Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Ιωάννης Τσαφαράς

126 views

Published on

Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού

Published in: Education
  • Be the first to comment

  • Be the first to like this

Ιωάννης Τσαφαράς

  1. 1. Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού Ιωάννης Τσαφαράς, ΑΕΜ: 7542 Υπό την επίβλεψη του Επίκουρου Καθηγητή Ανδρέα Λ. Συμεωνίδη Θεσσαλονίκη, Νοέμβριος 2017 Αριστοτέλειο Πανεπιστήμιο Θεσσαλονίκης Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τομέας Ηλεκτρονικής και Υπολογιστών Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών (ΕΠΥ)
  2. 2. Δομή της παρουσίασης • Εισαγωγή στο Continuous Integration (CI) • Σκοπός εργασίας • Σύγκριση και επιλογή συστήματος CI • Βήματα υλοποίησης υποδομής CI • Εφαρμογή υλοποιημένου συστήματος • Συμπεράσματα Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 2
  3. 3. Continuous Integration (CI) • Grady Booch, 1991, 1 από 12 στοιχεία του Extreme Programming (XP) • Συχνή συγχώνευση (merging) κώδικα • Λειτουργικό προϊόν σε κάθε συγχώνευση • Προσθήκη λειτουργιών σε κάθε έκδοση Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 3
  4. 4. Πλεονεκτήματα CI • Ελαχιστοποίηση προβλημάτων ενσωμάτωσης • Προβλήματα συγχώνευσης (merge conflicts) • Προβλήματα συμβατότητας στοιχείων εφαρμογής • Γρήγορη εύρεση σφαλμάτων λογισμικού (bugs) • Γρηγορότερη ανάπτυξη ποιοτικού λογισμικού Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 4
  5. 5. Σκοπός της εργασίας • Απλοποίηση διαδικασίας ελέγχου ποιότητας κώδικα έργων λογισμικού • Χρήση συστημάτων Continuous Integration (CI) • Αυτόματη παροχή pre-production (staging) έκδοσης του έργου • Δυνατότητα αυτόματης ενημέρωσης production έκδοσης • Συμβατότητα υλοποιημένου συστήματος με πλατφόρμες cloud computing Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 5
  6. 6. Γνώσεις που αποκτήθηκαν • Συστήματα Continuous Integration • Συστήματα διαχείρισης διαμόρφωσης λογισμικού (software configuration management) • Ανάπτυξη αυτοματοποιημένης διαδικασίας δημιουργίας CI σε υποδομές cloud computing Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 6 CI Στατική ανάλυση κώδικα CD/CDE CircleCI Travis CI Jenkins SonarQube Chef Puppet Ansible
  7. 7. Αυτόματα συστήματα CI -1- • Αυτοματοποίηση διαδικασίας μετά από συγχώνευση • Μεταγλώττιση (compile), σύνδεση (link) • Αυτόματοι Έλεγχοι (tests) • Unit tests • API test • Local CIs • CI-as-a-Service (cloud-based CIs) Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 7
  8. 8. Αυτόματα συστήματα CI -2- • Local CI • Jenkins CI • Για open και closed source έργα • Πληθώρα plugins • Μεγάλη υποστήριξη • CI-as-a-Service • Travis CI • Για open source έργα • Χρήση μέσω GitHub • Πιο δημοφιλές cloud- based CI • CircleCI • Συνεργασία με GitHub, BitBucket • Υποστήριξη λιγότερων γλωσσών από Travis CI Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 8 CI CircleCI Travis CI Jenkins
  9. 9. Στατική ανάλυση κώδικα • Στατική ανάλυση κώδικα μέσω SonarQube • Κύριες μετρικές: • Σφάλματα κώδικα (bugs) • Κενά ασφαλείας (vulnerabilities) • Διπλότυπος κώδικας (duplications) • Τεχνικό χρέος (code smells/technical debt) Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 9 Στατική ανάλυση κώδικα SonarQube
  10. 10. Continuous Deployment (CD) Continuous Delivery (CDE) • Επέκταση του CI • Εγκατάσταση νέας έκδοσης του κώδικα σε περιβάλλον, μετά την επιτυχία των βημάτων CI • CD: Αυτόματο • CDE: Απαιτεί αποδοχή χρήστη Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 10
  11. 11. CD, CDE στην εργασία • Χρήση Continuous Deployment: Εγκατάσταση κώδικα σε staging περιβάλλον • Χρήση Continuous Delivery: Εγκατάσταση κώδικα σε production περιβάλλον • Υλοποίηση CD, CDE: Εργαλεία διαχείρισης διαμόρφωσης λογισμικού (software configuration management) Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 11
  12. 12. Εργαλεία Software Configuration Management -1- • Καταγραφή αλλαγών σε έναν server • Εγκατάσταση πακέτων • Ρύθμιση services, συστήματος • Εγκατάσταση κώδικα κ.ά. • Σκοπός η επαναπραγματοποίηση των αλλαγών • Ευρέως χρησιμοποιούμενα εργαλεία: • Ansible • Puppet • Chef Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 12 CD/CDE Chef Puppet Ansible
  13. 13. Εργαλεία Software Configuration Management -2- • Ansible • Playbooks σε YAML • Χρήση χωρίς πράκτορα (agentless), επικοινωνία μέσω SSH • Puppet • Manifests σε Domain Specific Language (DSL) • Απαιτείται πράκτορας, επικοινωνία με HTTPS • Chef • Cookbooks σε Domain Specific Language (DSL) ή Ruby • Απαιτείται πράκτορας Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 13
  14. 14. Εργαλεία Software Configuration Management -3- • Επιλογή Ansible • Αρχιτεκτονική χωρίς χρήση πράκτορα • Άμεση χρήση • Εξοικονόμηση πόρων • Ασφάλεια • Προϋπόθεση: SSH, Python • Απλή, εύκολη στην εκμάθηση γλώσσα YAML • Πολλά plugins, αυτοματοποίηση κάθε λειτουργίας Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 14
  15. 15. Τελική επιλογή συστήματος CI • Jenkins • Προσαρμοστικότητα • Χρήση σε ανοιχτού και κλειστού κώδικα έργα • Υποστήριξη από την κοινότητα • Πολυάριθμα plugins • SonarQube για στατική ανάλυση κώδικα • Ansible για CD/CDE Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 15 CI Στατική ανάλυση κώδικα CD/CDE CircleCI Travis CI Jenkins SonarQube Chef Puppet Ansible
  16. 16. CI Pipeline Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 16 Preparation Test SonarQube Analysis SonarQube Quality Gate Staging deploy Production deploy approval Production deploy CI Pipeline Success SCM Hook or Manual Trigger Error/Failure CI Pipeline Failure Any Step Continuous Integration (CI) Continuous Deployment (CD) + Continuous Delivery (CDE)
  17. 17. Βήματα CI Pipeline -1- • Preparation • Διαγραφή workspace • Checkout νέου κώδικα • Δημιουργία αρχείων μεταβλητών για τα deployments • Εγκατάσταση test/build dependencies • Build/compile, αν απαιτείται Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 17 Preparation Test SonarQube Analysis SonarQube Quality Gate
  18. 18. Βήματα CI Pipeline -2- • Test • Εκτέλεση unit tests • Εκτέλεση API tests • Αποθήκευση test coverage • SonarQube Analysis • Στατική ανάλυση κώδικα • Παρουσίαση αποτελεσμάτων στο SonarQube WebUI • SonarQube Quality Gate • Πληροί ο νέος κώδικας τις προϋποθέσεις ποιότητας; Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 18 Preparation Test SonarQube Analysis SonarQube Quality Gate
  19. 19. Βήματα CI Pipeline -3- • Staging deploy • Χρήση Ansible για deployment στον staging server • Production deploy approval • Αποδοχή/άρνηση deployment στο production • Production deploy • Χρήση Ansible για deployment στον production server Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 19 Staging deploy Production deploy approval Production deploy
  20. 20. Εκτέλεση CI Pipeline Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 20 Βήμα Pipeline “Production deploy approval”
  21. 21. Διαδικασίες CD/CDE Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 21 deploy-app- production.yml deploy-app- staging.yml app_type app-nodejs role app-django role app-jetty role nodejs django jettyStaging Server Production Server SSH SSH
  22. 22. Αρχιτεκτονική CI server -1- • Χρήση Docker • Ασφάλεια • Δημιουργία υπηρεσιών μέσω παραμετροποιημένων images (Dockerfiles) • Φορητότητα • 3 Docker containers • Jenkins • SonarQube • MySQL (για χρήση από SonarQube) Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 22
  23. 23. Αρχιτεκτονική CI server -2- • Σύνδεση των containers μέσω Docker network cinet • Jenkins ↔ SonarQube • SonarQube ↔ MySQL • Xρήση Docker volumes, για διατήρηση δεδομένων Jenkins και MySQL Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 23 Jenkins SonarQube MySQL
  24. 24. CI creator -1- • Webapp γραμμένο σε flask • Ansible εγκατεστημένο • Playbook, ρόλοι για deployment CI • Ουρά Celery με RabbitMQ, για την εκτέλεση Ansible Νοέμβριος 2017 24Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού
  25. 25. CI creator -2- • Λήψη μεταβλητών από το WebUI: • App name • App type • Node.js • Django • Jetty • CI host/username • SonarQube MySQL passwords • staging host/username • production host/username • Απαίτηση: Ύπαρξη SSH keys Νοέμβριος 2017 25Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού
  26. 26. CI creator video Νοέμβριος 2017 26Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού
  27. 27. Εγχειρίδιο χρήσης CI Νοέμβριος 2017 27Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού
  28. 28. Αποτελέσματα -1- Εκτέλεση CI build στο project του ISSEL, Web Recorder Server Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 28
  29. 29. Αποτελέσματα -2- Αποτελέσματα SonarQube για Web Recorder Server Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 29
  30. 30. Αποτελέσματα -3- Παρακολούθηση διεργασιών Web Recorder Server μέσω Node.js Production Process Manager, PM2 Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 30
  31. 31. Αποτελέσματα -4- Δημιουργία υπηρεσίας Continuous Integration για την εταιρία YummyWallet Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 31
  32. 32. Συμπεράσματα • Διευκόλυνση διαδικασίας εγκατάστασης συστήματος CI + CD/CDE • Συμβατότητα αρχιτεκτονικής με υποδομές cloud, δοκιμή σε υποδομές: • • • Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 32
  33. 33. Μελλοντική Εργασία • Πλήρης αυτοματοποίηση παραμετροποίησης CI • Συμβατότητα με διαφορετικά λειτουργικά συστήματα (RedHat-based) • Αξιοποίηση APIs cloud παρόχων Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 33
  34. 34. Κώδικας, παραδείγματα github.com/ioantsaf/ci Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 34
  35. 35. Ευχαριστώ για την προσοχή σας! Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 35
  36. 36. Ερωτήσεις, Επικοινωνία jiannist@gmail.com github.com/ioantsaf linkedin.com/in/giannis- tsafaras/ Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 36

×