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.
4. Continuous Integration (CI)
Συχνή συγχώνευση κώδικα (merging)
Αυτοματοποιημένοι έλεγχοι
Λειτουργικό προϊόν σε κάθε συγχώνευση
Προσθήκη λειτουργιών σε κάθε έκδοση
5. Πλεονεκτήματα του CI
Γρήγορη εύρεση και ελαχιστοποίηση σφαλμάτων κώδικα (bugs)
Ελαχιστοποίηση και αποφυγή προβλημάτων ενσωμάτωσης
Προβλήματα συγχώνευσης (merge conflicts)
Ασυμβατότητα στοιχείων εφαρμογής
Γρηγορότερη ανάπτυξη ποιοτικού και αξιόπιστου λογισμικού
Υψηλή απόδοση και μείωση κόστους
6. Σκοπός της Διπλωματικής
Απλοποίηση χρήσης ενός συστημάτος CI
Χρήση εύκολα παραμετροποιήσιμων προτύπων(templates) pipelines
Αυτόματη μεταφορά εφαρμογής σε δοκιμαστικό (staging) περιβάλλον
Δυνατότητα αυτόματης ενημέρωσης στο τελικό(production) περιβάλλον
Δυνατότητα επιλογής deployment στη cloud πλατφόρμα Heroku
Δυνατότητα επιλογής deployment σε remote server/virtual machine
Yποστήριξη web εφαρμογών Node.js και Django
Διευκόλυνση εκμάθησης διαδικασίας CI
Απευθύνεται σε φοιτητές και προγραμματιστές με μικρή εμπειρία
9. Συστήματα CI (1/2)
Έναρξη pipeline αυτόματα μετά από merge/commit
Μεταγλώττιση(complile)
Αυτόματοι Έλεγχοι (tests)
Unit tests
API tests
Deploy
Local CIs
CI-as-a-Service (cloud based)
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. Επιλογή Συστήματος CI
Πλεονεκτήματα Gitlab και Github
Κώδικας και υλοποίηση μαζί ενσωματωμένα
Διευκόλυνση διαδικασίας CI + CD/CDE
Mικρές διαφορές μεταξύ Gitlab CI και Github Actions
Επιλογή Gitlab CI
13. Continuous Deployment (CD)
Continuous Delivery (CDE) (1/2)
Επέκταση του CI
Εγκατάσταση νέας έκδοσης κώδικα στο επιθυμητό
περιβάλλον(staging/production) μετά την επιτυχία των βημάτων CI
Αυτόματη εκτέλεση CD
Αποδοχή χρήστη-χειροκίνητη εκτέλεση CDE
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. Εργαλεία Software Configuration
Management (1/3)
Καταγραφή αλλαγών σε έναν server
Εγκατάσταση πακέτων
Ρύθμιση υπηρεσιών,παραμέτρων συστήματος
Εγκατάσταση κώδικα κ.α
Στόχος η επαναπραγματοποίηση των αλλαγών σε άλλους servers
Ευρέως χρησιμοποιούμενα εργαλεία:
Ansible
Puppet
Chef
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. Εργαλεία Software Configuration
Management (3/3)
Επιλογή Ansible
Αρχιτεκτονική χωρίς χρήση πράκτορα
Εξοικονόμηση πόρων
Ασφάλεια
Άμεση χρήση
Προϋποθέσεις: SSH, Python
Η γλώσσα YAML είναι απλή και εύκολη στην εκμάθηση
Πολλά modules/plugins , αυτοματοποίηση κάθε λειτουργίας
20. Στάδια CI + CD/CDE Pipeline (1/3)
Preparation
Εκτελείται αυτόματα από το Gitlab
Έναρξη Docker executor
Εγκατάσταση docker images(node.js ή django, services mysql,postgres)
Προετοιμασία περιβάλλοντος για την εφαρμογή
21. Στάδια CI + CD/CDE Pipeline (2/3)
Test / Code Quality
Εγκατάσταση απαραίτητων πακέτων για τους ελέγχους της εφαρμογής
Εκτέλεση Unit tests
Εκτέλεση API tests
Αποθήκευση test coverage
Στατική ανάλυση κώδικα
Δημιουργία αρχείου σφαλμάτων (bugs)
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
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. Δημιουργία μεταβλητών στο Gitlab
Settings→CI/CD→ Variables
SSH keys των servers για σύνδεση του
Giltab
Heroku API keys για deployment στο
Heroku
Oνόματα εφαρμογών στο Heroku
Στοιχεία εφαρμογής,χρήστη,βάσης
δεδομένων
Επιλογή τύπου βάσης δεδομένων
Επιλογή για deployment στο Heroku ή
server
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. Aποτελέσματα (1/4)
Επιτυχής ολοκλήρωση όλων
των σταδίων του pipeline για
την εφαρμογή “Todo App
Create App”
Αρχείο gl-code-quality-
report.json με τα bugs
που περιλαμβάνει ο
κώδικας
33. Συμπεράσματα
Απλοποιημένη και εύκολα κατανοητή διαδικασία
Διευκόλυνση εκμάθησης και χρήσης συστημάτων CI + CD/CDE
Συμβατότητα αρχιτεκτονικής με υποδομές cloud, δοκιμή σε Azure
Δεν είναι εφικτή η πλήρης αυτοματοποίηση των βημάτων της
διαδικασίας
35. Μελλοντική Εργασία
Υποστήριξη περισσότερων τύπων εφαρμογών πέρα από Node.js και
Django
Υποστήριξη και άλλων τύπων βάσεων δεδομένων πέρα από MySQL
και PostgreSQL
Προσθήκη λειτουργιών
Αυτοματοποίηση των βημάτων της διαδικασίας ακόμα περισσότερο