1. Ανάπτυξη και σχεδίαση
αυτοματοποιημένης υποδομής
Continuous Integration σε έργα
λογισμικού
Ιωάννης Τσαφαράς, ΑΕΜ: 7542
Υπό την επίβλεψη του Επίκουρου Καθηγητή
Ανδρέα Λ. Συμεωνίδη
Θεσσαλονίκη, Νοέμβριος 2017
Αριστοτέλειο Πανεπιστήμιο Θεσσαλονίκης
Πολυτεχνική Σχολή
Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών
Τομέας Ηλεκτρονικής και Υπολογιστών
Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών (ΕΠΥ)
2. Δομή της παρουσίασης
• Εισαγωγή στο Continuous Integration (CI)
• Σκοπός εργασίας
• Σύγκριση και επιλογή συστήματος CI
• Βήματα υλοποίησης υποδομής CI
• Εφαρμογή υλοποιημένου συστήματος
• Συμπεράσματα
Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 2
3. Continuous Integration (CI)
• Grady Booch, 1991, 1 από 12 στοιχεία του Extreme
Programming (XP)
• Συχνή συγχώνευση (merging) κώδικα
• Λειτουργικό προϊόν σε κάθε συγχώνευση
• Προσθήκη λειτουργιών σε κάθε έκδοση
Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 3
4. Πλεονεκτήματα CI
• Ελαχιστοποίηση προβλημάτων ενσωμάτωσης
• Προβλήματα συγχώνευσης (merge conflicts)
• Προβλήματα συμβατότητας στοιχείων εφαρμογής
• Γρήγορη εύρεση σφαλμάτων λογισμικού (bugs)
• Γρηγορότερη ανάπτυξη ποιοτικού λογισμικού
Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 4
5. Σκοπός της εργασίας
• Απλοποίηση διαδικασίας ελέγχου ποιότητας
κώδικα έργων λογισμικού
• Χρήση συστημάτων Continuous Integration (CI)
• Αυτόματη παροχή pre-production (staging) έκδοσης του
έργου
• Δυνατότητα αυτόματης ενημέρωσης production
έκδοσης
• Συμβατότητα υλοποιημένου συστήματος με
πλατφόρμες cloud computing
Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 5
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. Αυτόματα συστήματα CI -1-
• Αυτοματοποίηση διαδικασίας μετά από
συγχώνευση
• Μεταγλώττιση (compile), σύνδεση (link)
• Αυτόματοι Έλεγχοι (tests)
• Unit tests
• API test
• Local CIs
• CI-as-a-Service (cloud-based CIs)
Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 7
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. Στατική ανάλυση κώδικα
• Στατική ανάλυση κώδικα μέσω SonarQube
• Κύριες μετρικές:
• Σφάλματα κώδικα (bugs)
• Κενά ασφαλείας (vulnerabilities)
• Διπλότυπος κώδικας (duplications)
• Τεχνικό χρέος (code smells/technical debt)
Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 9
Στατική ανάλυση κώδικα
SonarQube
10. Continuous Deployment (CD)
Continuous Delivery (CDE)
• Επέκταση του CI
• Εγκατάσταση νέας έκδοσης του κώδικα σε
περιβάλλον, μετά την επιτυχία των βημάτων CI
• CD: Αυτόματο
• CDE: Απαιτεί αποδοχή χρήστη
Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 10
11. CD, CDE στην εργασία
• Χρήση Continuous Deployment:
Εγκατάσταση κώδικα σε staging περιβάλλον
• Χρήση Continuous Delivery:
Εγκατάσταση κώδικα σε production περιβάλλον
• Υλοποίηση CD, CDE:
Εργαλεία διαχείρισης διαμόρφωσης λογισμικού
(software configuration management)
Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 11
12. Εργαλεία Software Configuration
Management -1-
• Καταγραφή αλλαγών σε έναν server
• Εγκατάσταση πακέτων
• Ρύθμιση services, συστήματος
• Εγκατάσταση κώδικα κ.ά.
• Σκοπός η επαναπραγματοποίηση των αλλαγών
• Ευρέως χρησιμοποιούμενα εργαλεία:
• Ansible
• Puppet
• Chef
Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 12
CD/CDE
Chef
Puppet
Ansible
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. Εργαλεία Software Configuration
Management -3-
• Επιλογή Ansible
• Αρχιτεκτονική χωρίς χρήση πράκτορα
• Άμεση χρήση
• Εξοικονόμηση πόρων
• Ασφάλεια
• Προϋπόθεση: SSH, Python
• Απλή, εύκολη στην εκμάθηση γλώσσα YAML
• Πολλά plugins, αυτοματοποίηση κάθε λειτουργίας
Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 14
15. Τελική επιλογή συστήματος CI
• Jenkins
• Προσαρμοστικότητα
• Χρήση σε ανοιχτού και κλειστού κώδικα έργα
• Υποστήριξη από την κοινότητα
• Πολυάριθμα plugins
• SonarQube για στατική ανάλυση κώδικα
• Ansible για CD/CDE
Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 15
CI Στατική ανάλυση κώδικα CD/CDE
CircleCI
Travis CI
Jenkins SonarQube
Chef
Puppet
Ansible
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. Βήματα CI Pipeline -1-
• Preparation
• Διαγραφή workspace
• Checkout νέου κώδικα
• Δημιουργία αρχείων μεταβλητών για τα deployments
• Εγκατάσταση test/build dependencies
• Build/compile, αν απαιτείται
Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 17
Preparation Test
SonarQube
Analysis
SonarQube
Quality
Gate
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. Βήματα 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. Εκτέλεση CI Pipeline
Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 20
Βήμα Pipeline “Production deploy approval”
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. Αρχιτεκτονική CI server -1-
• Χρήση Docker
• Ασφάλεια
• Δημιουργία υπηρεσιών μέσω παραμετροποιημένων
images (Dockerfiles)
• Φορητότητα
• 3 Docker containers
• Jenkins
• SonarQube
• MySQL (για χρήση από SonarQube)
Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 22
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. CI creator -1-
• Webapp γραμμένο σε flask
• Ansible εγκατεστημένο
• Playbook, ρόλοι για deployment CI
• Ουρά Celery με RabbitMQ, για την εκτέλεση
Ansible
Νοέμβριος 2017 24Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού
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. CI creator video
Νοέμβριος 2017 26Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού
27. Εγχειρίδιο χρήσης CI
Νοέμβριος 2017 27Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού
28. Αποτελέσματα -1-
Εκτέλεση CI build στο project του ISSEL, Web Recorder Server
Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 28
29. Αποτελέσματα -2-
Αποτελέσματα SonarQube για Web Recorder Server
Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 29
30. Αποτελέσματα -3-
Παρακολούθηση διεργασιών Web Recorder Server μέσω
Node.js Production Process Manager, PM2
Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 30
31. Αποτελέσματα -4-
Δημιουργία υπηρεσίας Continuous Integration για την εταιρία
YummyWallet
Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 31
32. Συμπεράσματα
• Διευκόλυνση διαδικασίας εγκατάστασης
συστήματος CI + CD/CDE
• Συμβατότητα αρχιτεκτονικής με υποδομές cloud,
δοκιμή σε υποδομές:
•
•
•
Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 32
33. Μελλοντική Εργασία
• Πλήρης αυτοματοποίηση παραμετροποίησης CI
• Συμβατότητα με διαφορετικά λειτουργικά
συστήματα (RedHat-based)
• Αξιοποίηση APIs cloud παρόχων
Νοέμβριος 2017 Ανάπτυξη και σχεδίαση αυτοματοποιημένης υποδομής Continuous Integration σε έργα λογισμικού 33