Successfully reported this slideshow.
Your SlideShare is downloading. ×

Development of an automatic procedure for Continuous Integration

Development of an automatic procedure for Continuous Integration

Download to read offline

In recent years there has been a rapid growth in the field of cloud computing which has aroused the interest of many companies, with their demand constantly growing as well as the number of providers offering these services. However, despite the fact that the use of cloud computing has been established, offering many advantages, various challenges arise, such as data security. A key element of the software development process is the frequent testing of the application, in order to ensure quality and minimize bugs, which is achieved through Continuous Integration (CI) systems. Upon successful execution of the automated tests, CI deploys the latest version of the code in a pre-production (staging) or production environment automatically through Continuous Deployment (CD) and Continuous Delivery (CDE). The purpose of this thesis is comparing cloud providers, and then developing a method that simpifies the usage of a CI + CD/CDE system. Our approach also integrates static code analysis and evaluation. CI and CD/CDE processes are implemented through Gitlab, an open source software, with ready-to-use pipelines(Templates) supporting Node.js and Django web applications, while static analysis is performed through Code Quality which is embedded in Gitlab and is based on the Code Climate tool. The automatic installation of the prerequisites for the application deployment, in other words the server setup, and the first deployment , are performed through the Ansible software configuration management tool. Moreover, is given the capability to the user to deploy the app on the cloud platform Heroku without the need of using Ansible. The outcome of the thesis is aimed primarily at students or software developers with little experience who want to get involved and take their first steps with Gitlab CI.

In recent years there has been a rapid growth in the field of cloud computing which has aroused the interest of many companies, with their demand constantly growing as well as the number of providers offering these services. However, despite the fact that the use of cloud computing has been established, offering many advantages, various challenges arise, such as data security. A key element of the software development process is the frequent testing of the application, in order to ensure quality and minimize bugs, which is achieved through Continuous Integration (CI) systems. Upon successful execution of the automated tests, CI deploys the latest version of the code in a pre-production (staging) or production environment automatically through Continuous Deployment (CD) and Continuous Delivery (CDE). The purpose of this thesis is comparing cloud providers, and then developing a method that simpifies the usage of a CI + CD/CDE system. Our approach also integrates static code analysis and evaluation. CI and CD/CDE processes are implemented through Gitlab, an open source software, with ready-to-use pipelines(Templates) supporting Node.js and Django web applications, while static analysis is performed through Code Quality which is embedded in Gitlab and is based on the Code Climate tool. The automatic installation of the prerequisites for the application deployment, in other words the server setup, and the first deployment , are performed through the Ansible software configuration management tool. Moreover, is given the capability to the user to deploy the app on the cloud platform Heroku without the need of using Ansible. The outcome of the thesis is aimed primarily at students or software developers with little experience who want to get involved and take their first steps with Gitlab CI.

More Related Content

More from ISSEL

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

Development of an automatic procedure for 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. Ευχαριστώ πολύ για την προσοχή σας! Ερωτήσεις;

×