Continuous Integration CI - isaar/MSolve GitHub Wiki

Λογική-Χρησιμότητα

Continuous Integration (ή διαρκής ενσωμάτωση) είναι η πρακτική ενσωμάτωση των αλλαγών από τα τμήματα του κώδικα που δουλεύουμε σε ένα κοινό κεντρικό κώδικα σε τακτά χρονικά διαστήματα. Στην περίπτωση μας αυτό αντιστοιχεί στην ενσωμάτωση των τοπικών αλλαγών από τα branch μας (πχ {your_name}/feature1) στο κεντρικό branch του isaar/development. Ο κύριος λόγος ύπαρξης αυτής της διαδικασίας είναι να αναγνωρισθούν και να αντιμετωπισθουν τυχόν προβλήματα/ελλείψεις στους επιμέρους κώδικες πριν την ενσωμάτωση των αλλαγών στο κεντρικό repo. Αυτό επιτυγχάνεται με τη σύνδεση του κώδικα μας με κάποιο online εργαλείο που έχει δυο βασικές λειτουργίες

  • Ελέγχει οτι ο κώδικας που έχει ανέβει σε κάποιο συγκεκριμένο commit/pull request κάνει build.
  • Αναγνωρίζει και εκτελεί τα Test που έχουν δημιουργηθεί με σκοπό να ελέγξει την λειτουργικότητα του κώδικα. Δυο από τα πολλά διαθέσιμα εργαλεία που εκτελούν τις παραπάνω διεργασίες είναι τo TRAVIS CI και το AppVeyor. Κάθε ένα από αυτά τα εργαλεία μπορεί να συνδεθεί με τη σειρά του, με επιπλέον υπηρεσίες που μου δίνουν επιπλέον πληροφορίες για την ποιότητα του κώδικα και την επάρκεια των Test.

Workflow

Για την ενσωμάτωση των αλλαγών στο branch isaar/development ΔΕΝ θα χρειαστεί από εσάς η υλοποίηση των παρακάτω βημάτων για τον έλεγχο του κώδικας σας. Παρόλα αυτά παρουσιάζονται στη συνέχεια αναλυτικά τα βήματα σε περίπτωση που κάπιος επιθυμεί να ελέγχει κάποιο branch του ή οποιοδήποτε project του ανοιχτο στο github. Εν συντομία τα βήματα που παρουσιάζονται σε κάθε Continuous Integration Tool είναι τα ακόλουθα:

  • Εγγραφή στο CI site μέσω του version control tool της επιλογής σας. Πx. Login with Github.
  • Επιλογή του ανοιχτού repository απο τα διαθέσιμα στο λογαριασμό σας στο Github. πχ MSolve
  • Προσθήκη στο solution, αρχείου .yml που λειτουργεί σαν configuration file για την σύνδεση κώδικα και CI tool
  • Κάνουμε commit τις αλλαγές και push στο origin και έχουμε ρυθμίσει έτσι το πρώτο CI tool για το project μας. Θα δουμε παρακάτω αναλυτικά αυτά τα βήματα για κάθε ένα από τα τα TRAVIS CI και το AppVeyor

TRAVIS CI

Μπαίνουμε στο site https://travis-ci.org/

TRAVIS-0

Πάνω δεξια παρατηρούμε το κουμπί Sign in with Github με το οποίο συνδέουμε τo TRAVIS με το λογαριασμό μας στο Github. Με τον τρόπο αυτό μπορεί το TRAVIS να αναγνωρίσει τα διαθέσιμα repos. Αφού γίνει η σύνδεση με επιτυχία εμφανίζεται η παρακάτω οθόνη:

TRAVIS-1

Εδώ μπορούμε να δούμε τα διαθέσιμα repos. Στην παραπάνω περίπτωση το dimtsap/MSolve οπότε και το επιλέγουμε. Συνεχίζουμε με την προσθήκη του αρχείου .travis.yml όπως απαιτεί το site για να γίνει η σύνδεση του repo και το πρώτο online build στον κώδικα.

Αρχείο YML

Επόμενο βήμα στην διαδικασία είναι να προσθέσουμε το configuration file. Στην περίπτωση του MSolve το αρχείο αυτό θα μπορούσε να είναι το ακόλουθο:

language: csharp
dist: trusty
mono: none
dotnet: 2.0.0
branches:
  only:
    - develop

script:
  - dotnet restore
  - dotnet build
  - dotnet test ISAAR.MSolve.Tests

Αναλυτικά για κάθε μια από τις γραμμές του αρχείου έχουμε:

language: csharp

Στην πρώτη γραμμή ορίζεται η γλώσσα προγραμματισμού που χρησιμοποιείεται στο project.

dist: trusty

Εδώ ορίζεται το λειτουργικό που θα χρησιμοποιηθεί. Στην συγκρκριμένη περίπτωση Ubuntu.

mono: none
dotnet: 2.0.0

Η έκδοση του mono ορίζεται ως none για να μπορούμε αν χρησιμποιήσουμε .NET Core στα project μας, ενώ η έκδοση του ορίζεται σε 2.0.0

branches:
  only:
    - develop

Στη συνέχεια ορίζουμε τα branches του github τα οποία θέλουμε να αναλύονται από το TRAVIS CI.

script:
  - dotnet restore
  - dotnet build
  - dotnet test ISAAR.MSolve.Tests

Και τέλος ορίζονται οι τα βήματα που θα εκτελέσει το CI Tool. Στη συγκεκριμένη περίπτωση γίνεται restore των nugets,build του κώδικα και τέλος επιλέγεται ο φάκελος που περιέχει τα Tests που θα κάνουν validate τη λειτουργικότητα του κώδικα.

Λεπτομερείς οδηγίες για τη συμπλήρωση του .yml αρχείου μπορείτε να βρείτε εδώ

Push

Τελευταίο βήμα να ανέβει η αλλαγή του αρχείου μεσω git στο origin και έχει ολοκληρωθεί η σύνδεση Project με το πρώτο Continuous Integration tool.

AppVeyor

Το AppVeyor είναι παρόμοιο σε λογική με το TRAVIS. Η βασική διαφορά τους είναι στο περιβάλλον που γίνεται το build της εφαρμογής. Ενώ στο TRAVIS το περιβάλλον μπορεί να επιλεγεί ανάμεσα σε linux και MacOS, το AppVeyor δουλέυει σε περιβάλλον windows. Συνεπώς με το συνδυασμό των δυο CI tool μπορούμε να ελέγξουμε οτι o κώδικας που αναπτύσσεται δουλεύει εξίσου καλά σε διαφορετικά περιβάλλοντα. Στη συνέχεια λοιπόν παρουσιάζουμε την διαδικασία ενσωμάτωσης:

Μπαίνουμε στο site https://www.appveyor.com/

APPVEYOR-0

Στο επάνω δεξιά τμήμα της οθόνης εμφανίζεται η επιλογή Sign In την οποία και κλικάρουμε.Μεταφερόμαστε έτσι στην επόμενη οθόνη

APPVEYOR-1

Εδώ επιλέγουμε κάποιο από τα διαθέσιμα εργαλεία version control που χρησιμοποιούμε ήδη για να κάνουμε login. Στην περίπτωση μας το Github. Στην επόμενη οθόνη, θα προσθέσουμε το project που θα αναλυθεί από το AppVeyor.

APPVEYOR-2

Κάνουμε κλικ στην επιλογή new project οπότε και μεταφερόμαστε σε μια οθόνη αναζήτησης που εμφανίζονται τα open-source project από το github.

APPVEYOR-3

Επιλέγουμε το project μας κάνοντας κλικ, εδώ στην περίπτωσή μας το project ΜSolve. Οπότε είμαστε έτοιμοι να προσθέσουμε το αρχείο yml στο επόμενο commit και να το ανεβάσουμε για να αρχίσει η λειτουργία και του ApppVeyor.

Αρχείο YML

Επόμενο βήμα στην διαδικασία είναι να προσθέσουμε το configuration file. Στην περίπτωση του MSolve το αρχείο αυτό θα μπορούσε να είναι το ακόλουθο:

version: '1.0.{build}'
configuration: Release
image: Visual Studio 2017
branches:
  only: 
    - develop
clone_folder: C:\Users\user\Source\Repos\MSolve
shallow_clone: true
cache:
  - packages
install:
  - dotnet restore --packages packages 
before_build:
- ps: >-
    nuget restore
matrix:
  fast_finish: true
build:
  project: ISAAR.MSolve.sln
  parallel: true
  verbosity: detailed

Λεπτομερείς οδηγίες για τη συμπλήρωση του .yml αρχείου μπορείτε να βρείτε εδώ

Push

Τελευταίο βήμα να ανέβει η αλλαγή του αρχείου μεσω git στο origin και έχει ολοκληρωθεί η σύνδεση Project με το AppVeyor.