Se ha denunciado esta presentación.
Se está descargando tu SlideShare. ×

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

Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio

Eche un vistazo a continuación

1 de 38 Anuncio

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

Descargar para leer sin conexión

Τα τελευταία χρόνια παρατηρείται μια ραγδαία ανάπτυξη στο τομέα των υπηρεσιών νέφους(cloud computing) η οποία προκάλεσε το ενδιαφέρον πολλών επιχειρήσεων, με τη ζήτησή τους να αυξάνεται συνεχώς όπως επίσης και ο αριθμός των παρόχων που προσφέρουν αυτές τις υπηρεσίες. Όμως, παρά το ότι έχει εδραιωθεί η χρήση του cloud computing προσφέροντας πολλά πλεονεκτήματα, ανακύπτουν και διάφορες προκλήσεις, όπως η ασφάλεια των δεδομένων. Βασικό στοιχείο της διαδικασίας ανάπτυξης λογισμικού αποτελεί η συχνή πραγματοποίηση ελέγχων (tests) στην εφαρμογή, που αποσκοπεί στην διασφάλιση της ποιότητας, και την ελαχιστοποίηση των σφαλμάτων (bugs) , κάτι που επιτυγχάνεται μέσω των συστημάτων συνεχούς ενσωμάτωσης (Continuous Integration, CI). Μετά την επιτυχημένη εκτέλεση των αυτοματοποιημένων ελέγχων, το CI αποστέλλει και εκτελεί την τελευταία έκδοση του κώδικα στο δοκιμαστικό (staging) ή στο τελικό (production) περιβάλλον αυτόματα μέσω των συστημάτων Continuous Deployment (CD) και Continuous Delivery (CDE). Ο σκοπός της παρούσας εργασίας είναι η σύγκριση των παρόχων cloud, και ακολούθως η ανάπτυξη μιας μεθοδολογίας, μέσω της οποίας να απλοποιείται η χρήση ενός συστήματος CI + CD/CDE. Η προσέγγισή μας ενσωματώνει επίσης στατική ανάλυση και αξιολόγηση ποιότητας κώδικα. Η υλοποίηση του CI καθώς και των διαδικασιών CD/CDE γίνονται μέσω του διαδικτυακού εργαλείου ανοιχτού κώδικα Gitlab, όπου γίνεται χρήση έτοιμων pipelines με υποστήριξη εφαρμογών Node.js και Django, ενώ η στατική ανάλυση πραγματοποιείται μέσω του Code Quality που υπάρχει ενσωματωμένο στο Gitlab και βασίζεται στο εργαλείο Code Climate. Η αυτοματοποίηση της εγκατάστασης των προαπαιτούμενων για το deployment της εφαρμογής,δηλαδή η προετοιμασία του server, και το πρώτο deployment , πραγματοποιoύνται μέσω του εργαλείου διαχείρισης διαμόρφωσης λογισμικού Ansible. Ακόμη, δίνεται η δυνατότητα στο χρήστη για deployment της εφαρμογής στη cloud πλατφόρμα Heroku χωρίς να χρειάζεται η χρήση του Ansible. Το προϊόν της εργασίας απευθύνεται κυρίως σε φοιτητές ή προγραμματιστές με μικρή εμπειρία οι οποίοι θέλουν να ασχοληθούν και να κάνουν τα πρώτα τους βήματα με το CI του Gitlab.

Τα τελευταία χρόνια παρατηρείται μια ραγδαία ανάπτυξη στο τομέα των υπηρεσιών νέφους(cloud computing) η οποία προκάλεσε το ενδιαφέρον πολλών επιχειρήσεων, με τη ζήτησή τους να αυξάνεται συνεχώς όπως επίσης και ο αριθμός των παρόχων που προσφέρουν αυτές τις υπηρεσίες. Όμως, παρά το ότι έχει εδραιωθεί η χρήση του cloud computing προσφέροντας πολλά πλεονεκτήματα, ανακύπτουν και διάφορες προκλήσεις, όπως η ασφάλεια των δεδομένων. Βασικό στοιχείο της διαδικασίας ανάπτυξης λογισμικού αποτελεί η συχνή πραγματοποίηση ελέγχων (tests) στην εφαρμογή, που αποσκοπεί στην διασφάλιση της ποιότητας, και την ελαχιστοποίηση των σφαλμάτων (bugs) , κάτι που επιτυγχάνεται μέσω των συστημάτων συνεχούς ενσωμάτωσης (Continuous Integration, CI). Μετά την επιτυχημένη εκτέλεση των αυτοματοποιημένων ελέγχων, το CI αποστέλλει και εκτελεί την τελευταία έκδοση του κώδικα στο δοκιμαστικό (staging) ή στο τελικό (production) περιβάλλον αυτόματα μέσω των συστημάτων Continuous Deployment (CD) και Continuous Delivery (CDE). Ο σκοπός της παρούσας εργασίας είναι η σύγκριση των παρόχων cloud, και ακολούθως η ανάπτυξη μιας μεθοδολογίας, μέσω της οποίας να απλοποιείται η χρήση ενός συστήματος CI + CD/CDE. Η προσέγγισή μας ενσωματώνει επίσης στατική ανάλυση και αξιολόγηση ποιότητας κώδικα. Η υλοποίηση του CI καθώς και των διαδικασιών CD/CDE γίνονται μέσω του διαδικτυακού εργαλείου ανοιχτού κώδικα Gitlab, όπου γίνεται χρήση έτοιμων pipelines με υποστήριξη εφαρμογών Node.js και Django, ενώ η στατική ανάλυση πραγματοποιείται μέσω του Code Quality που υπάρχει ενσωματωμένο στο Gitlab και βασίζεται στο εργαλείο Code Climate. Η αυτοματοποίηση της εγκατάστασης των προαπαιτούμενων για το deployment της εφαρμογής,δηλαδή η προετοιμασία του server, και το πρώτο deployment , πραγματοποιoύνται μέσω του εργαλείου διαχείρισης διαμόρφωσης λογισμικού Ansible. Ακόμη, δίνεται η δυνατότητα στο χρήστη για deployment της εφαρμογής στη cloud πλατφόρμα Heroku χωρίς να χρειάζεται η χρήση του Ansible. Το προϊόν της εργασίας απευθύνεται κυρίως σε φοιτητές ή προγραμματιστές με μικρή εμπειρία οι οποίοι θέλουν να ασχοληθούν και να κάνουν τα πρώτα τους βήματα με το CI του Gitlab.

Anuncio
Anuncio

Más Contenido Relacionado

Presentaciones para usted (15)

Similares a Ανάπτυξη αυτοματοποιημένης διαδικασίας Continuous Integration σε έργα λογισμικού (20)

Anuncio

Más de ISSEL (20)

Más reciente (17)

Anuncio

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

  1. 1. Ανάπτυξη αυτοματοποιημένης διαδικασίας Continuous Integration σε έργα λογισμικού Θεσσαλονίκη , Ιούλιος 2021 ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ & ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΗΛΕΚΤΡΟΝΙΚΗΣ & ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΕΠΕΞΕΡΓΑΣΙΑΣ ΠΛΗΡΟΦΟΡΙΑΣ & ΥΠΟΛΟΓΙΣΜΩΝ Διπλωματική Εργασία Εκπόνηση: Ιωσήφ Χατζηκυριάκου, Α.Ε.Μ: 8605 Επιβλέποντας: Ανδρέας Λ. Συμεωνίδης, Αναπληρωτής Καθηγητής Α.Π.Θ.
  2. 2. Διάρθρωση Παρουσίασης  Εισαγωγή  Σύγκριση και επιλογή συστήματος CI  Μεθοδολογία  Αξιολόγηση & Αποτελέσματα  Συμπεράσματα  Μελλοντική Εργασία
  3. 3. Διάρθρωση Παρουσίασης  Εισαγωγή  Σύγκριση και επιλογή συστήματος CI  Μεθοδολογία  Αξιολόγηση & Αποτελέσματα  Συμπεράσματα  Μελλοντική Εργασία
  4. 4. Continuous Integration (CI)  Συχνή συγχώνευση κώδικα (merging)  Αυτοματοποιημένοι έλεγχοι  Λειτουργικό προϊόν σε κάθε συγχώνευση  Προσθήκη λειτουργιών σε κάθε έκδοση
  5. 5. Πλεονεκτήματα του CI  Γρήγορη εύρεση και ελαχιστοποίηση σφαλμάτων κώδικα (bugs)  Ελαχιστοποίηση και αποφυγή προβλημάτων ενσωμάτωσης  Προβλήματα συγχώνευσης (merge conflicts)  Ασυμβατότητα στοιχείων εφαρμογής  Γρηγορότερη ανάπτυξη ποιοτικού και αξιόπιστου λογισμικού  Υψηλή απόδοση και μείωση κόστους
  6. 6. Σκοπός της Διπλωματικής  Απλοποίηση χρήσης ενός συστημάτος CI Χρήση εύκολα παραμετροποιήσιμων προτύπων(templates) pipelines Αυτόματη μεταφορά εφαρμογής σε δοκιμαστικό (staging) περιβάλλον Δυνατότητα αυτόματης ενημέρωσης στο τελικό(production) περιβάλλον  Δυνατότητα επιλογής deployment στη cloud πλατφόρμα Heroku  Δυνατότητα επιλογής deployment σε remote server/virtual machine  Yποστήριξη web εφαρμογών Node.js και Django  Διευκόλυνση εκμάθησης διαδικασίας CI  Απευθύνεται σε φοιτητές και προγραμματιστές με μικρή εμπειρία
  7. 7.  Συστήματα Continuous Integration  Συστήματα διαχείρισης διαμόρφωσης λογισμικού (software configuration management)  Χρήση υπηρεσιών cloud computing Γνώσεις που αποκτήθηκαν
  8. 8. Διάρθρωση Παρουσίασης  Εισαγωγή  Σύγκριση και επιλογή συστήματος CI  Μεθοδολογία  Αξιολόγηση & Αποτελέσματα  Συμπεράσματα  Μελλοντική Εργασία
  9. 9. Συστήματα CI (1/2)  Έναρξη pipeline αυτόματα μετά από merge/commit  Μεταγλώττιση(complile)  Αυτόματοι Έλεγχοι (tests)  Unit tests  API tests  Deploy  Local CIs  CI-as-a-Service (cloud based)
  10. 10. Συστήματα CI (2/2)  Local CI  Jenkins CI - Open και Closed source έργα - Πληθώρα Plugins - Μεγάλη Υποστήριξη - Δωρεάν  CI-as-a-Service  Travis CI -Δημοφιλές cloud based CI -Χρήση μέσω Github  Circle CI -Συνεργασία με Github , BitBucket -Υποστήριξη λιγότερων γλωσσών από το Travis  Gitlab CI -Kώδικας και υλοποίηση μαζί ενσωματωμένα -Γλώσσα Yaml  Github Actions -Δημοφιλές-Μεγάλη κοινότητα -Github hosted / Self-hosted εκδόσεις
  11. 11. Επιλογή Συστήματος CI  Πλεονεκτήματα Gitlab και Github  Κώδικας και υλοποίηση μαζί ενσωματωμένα  Διευκόλυνση διαδικασίας CI + CD/CDE  Mικρές διαφορές μεταξύ Gitlab CI και Github Actions  Επιλογή Gitlab CI
  12. 12. Στατική ανάλυση κώδικα  Κύριες Μετρικές:  Σφάλματα κώδικα (bugs)  Αδυναμίες-κενά ασφαλείας (vulnerabilities)  Διπλότυπος κώδικας (duplications)  Επιλογή Code Quality  Ενσωματωμένο στο Gitlab  Βασίζεται στο εργαλείο Code Climate  Χρειάζεται απλά προσθήκη του template στο pipeline
  13. 13. Continuous Deployment (CD) Continuous Delivery (CDE) (1/2)  Επέκταση του CI  Εγκατάσταση νέας έκδοσης κώδικα στο επιθυμητό περιβάλλον(staging/production) μετά την επιτυχία των βημάτων CI  Αυτόματη εκτέλεση CD  Αποδοχή χρήστη-χειροκίνητη εκτέλεση CDE
  14. 14. Continuous Deployment (CD) Continuous Delivery (CDE) (2/2) Στην παρούσα εργασία  Χρήση CD για εγκατάσταση κώδικα στο staging περιβάλλον  Χρήση CDE για εγκατάσταση κώδικα στο production περιβάλλον  Χρήση Gitlab και κάποιου εργαλείου διαχείρισης διαμόρφωσης λογισμικού (software configuration management, scm) για υλοποίηση των CD/CDE σε εικονικές μηχανές (virtual machines)  Πρώτο deployment με χρήση του εργαλείου scm και μετά μέσω Gitlab
  15. 15. Εργαλεία Software Configuration Management (1/3)  Καταγραφή αλλαγών σε έναν server  Εγκατάσταση πακέτων  Ρύθμιση υπηρεσιών,παραμέτρων συστήματος  Εγκατάσταση κώδικα κ.α  Στόχος η επαναπραγματοποίηση των αλλαγών σε άλλους servers  Ευρέως χρησιμοποιούμενα εργαλεία:  Ansible  Puppet  Chef
  16. 16. Εργαλεία Software Configuration Management (2/3)  Ansible  Playbooks σε YAML γλώσσα  Επικοινωνία μέσω SSH και χρήση χωρίς πράκτορα (agentless)  Γραμμένο σε Python  Puppet  Manifests σε Domain Specific Language (DSL)  Eπικοινωνία με HTTPS και απαιτείται πράκτορας  Γραμμένο σε Ruby  Chef  Cookbooks σε Domain Specific Language (DSL) ή Ruby  Απαιτείται πράκτορας  Γραμμένο σε Ruby και Erlang
  17. 17. Εργαλεία Software Configuration Management (3/3)  Επιλογή Ansible  Αρχιτεκτονική χωρίς χρήση πράκτορα  Εξοικονόμηση πόρων  Ασφάλεια  Άμεση χρήση  Προϋποθέσεις: SSH, Python  Η γλώσσα YAML είναι απλή και εύκολη στην εκμάθηση  Πολλά modules/plugins , αυτοματοποίηση κάθε λειτουργίας
  18. 18. Διάρθρωση Παρουσίασης  Εισαγωγή  Σύγκριση και επιλογή συστήματος CI  Μεθοδολογία  Αξιολόγηση & Αποτελέσματα  Συμπεράσματα  Μελλοντική Εργασία
  19. 19. Δομή CI + CD/CDE Pipeline
  20. 20. Στάδια CI + CD/CDE Pipeline (1/3)  Preparation  Εκτελείται αυτόματα από το Gitlab  Έναρξη Docker executor  Εγκατάσταση docker images(node.js ή django, services mysql,postgres)  Προετοιμασία περιβάλλοντος για την εφαρμογή
  21. 21. Στάδια CI + CD/CDE Pipeline (2/3)  Test / Code Quality  Εγκατάσταση απαραίτητων πακέτων για τους ελέγχους της εφαρμογής  Εκτέλεση Unit tests  Εκτέλεση API tests  Αποθήκευση test coverage  Στατική ανάλυση κώδικα  Δημιουργία αρχείου σφαλμάτων (bugs)
  22. 22. Στάδια CI + CD/CDE Pipeline (3/3)  Staging deploy  deploy_cloud_staging: Χρήση Heroku για deployment στο staging περιβάλλον  deploy_server_staging: Χρήση Gitlab/Ansible για deployment στον staging server  Production deploy approval  Χειροκίνητη εκκίνηση των jobs στο στάδιο Production deploy από τον χρήστη  Production deploy  deploy_cloud_prod: Χρήση Heroku για deployment στο production περιβάλλον  deploy_server_prod: Χρήση Gitlab/Ansible για deployment στον production server
  23. 23. Δομή επιλογής host και ρόλων
  24. 24. Διάρθρωση Παρουσίασης  Εισαγωγή  Σύγκριση και επιλογή συστήματος CI  Μεθοδολογία  Αξιολόγηση & Αποτελέσματα  Συμπεράσματα  Μελλοντική Εργασία
  25. 25. Webapp δημιουργίας αρχείου μεταβλητών  App_name: Όνομα εφαρμογής  Αpp_type: Node.js ή Django  Repo_url: App repo στο Gitlab για αντιγραφή στον remote server  DB_type: MySQL ή PostgreSQL  DB_password/DB_username/DB_na me: Κωδικός / Όνομα χρήστη /’Ονομα βάσης δεδομένων 1) Κατέβασμα ως αρχείο deploy-app- vars.yml 2) Μετακίνηση αρχείου στο directory gitlab-reusable-pipelines/Ansible
  26. 26. Δημιουργία μεταβλητών στο Gitlab  Settings→CI/CD→ Variables  SSH keys των servers για σύνδεση του Giltab  Heroku API keys για deployment στο Heroku  Oνόματα εφαρμογών στο Heroku  Στοιχεία εφαρμογής,χρήστη,βάσης δεδομένων  Επιλογή τύπου βάσης δεδομένων  Επιλογή για deployment στο Heroku ή server
  27. 27. Δημιουργία αρχείου .gitlab-ci.yml  CI/CD→ Editor→ Create new CI/CD pipeline  Include nodejs-pipeline.yml για εφαρμογή Node.js  Include django-pipeline.yml για εφαρμογή Django  Copy/Paste το περιεχόμενο του αρχείου για τυχόν προσθήκες στο pipeline από τον χρήστη αντί include
  28. 28. Aποτελέσματα (1/4) Επιτυχής ολοκλήρωση όλων των σταδίων του pipeline για την εφαρμογή “Todo App Create App” Αρχείο gl-code-quality- report.json με τα bugs που περιλαμβάνει ο κώδικας
  29. 29. Aποτελέσματα (2/4) Επιτυχές deployment της εφαρμογής “Todo App Create App” στο Heroku
  30. 30. Aποτελέσματα (3/4) Επιτυχής εκτέλεση ansible playbook deploy-ci-staging.yml στη virtual machine για την εφαρμογή “node-demo”
  31. 31. Aποτελέσματα (4/4) Χειροκίνητη εκκίνηση εκτέλεσης του Production-deploy σταδίου Βήματα εκτέλεσης του Gitlab Runner για το job deploy_server_staging του pipeline
  32. 32. Διάρθρωση Παρουσίασης  Εισαγωγή  Σύγκριση και επιλογή συστήματος CI  Μεθοδολογία  Αξιολόγηση & Αποτελέσματα  Συμπεράσματα  Μελλοντική Εργασία
  33. 33. Συμπεράσματα  Απλοποιημένη και εύκολα κατανοητή διαδικασία  Διευκόλυνση εκμάθησης και χρήσης συστημάτων CI + CD/CDE  Συμβατότητα αρχιτεκτονικής με υποδομές cloud, δοκιμή σε Azure  Δεν είναι εφικτή η πλήρης αυτοματοποίηση των βημάτων της διαδικασίας
  34. 34. Διάρθρωση Παρουσίασης  Εισαγωγή  Σύγκριση και επιλογή συστήματος CI  Μεθοδολογία  Αξιολόγηση & Αποτελέσματα  Συμπεράσματα  Μελλοντική Εργασία
  35. 35. Μελλοντική Εργασία  Υποστήριξη περισσότερων τύπων εφαρμογών πέρα από Node.js και Django  Υποστήριξη και άλλων τύπων βάσεων δεδομένων πέρα από MySQL και PostgreSQL  Προσθήκη λειτουργιών  Αυτοματοποίηση των βημάτων της διαδικασίας ακόμα περισσότερο
  36. 36. Κώδικας  https://gitlab.com/jhadjikyriakou/gitlab-reusable-ci-pipelines
  37. 37. Ευχαριστίες Θα ήθελα να ευχαριστήσω θερμά:  Τον κ. Συμεωνίδη Ανδρέα  Όλους εσάς που παρακολουθήσατε την παρουσίαση!
  38. 38. Ευχαριστώ πολύ για την προσοχή σας! Ερωτήσεις;

×