Middle
Τι συμβαίνει μετά το κατέβασμα του κώδικα από το GitLab;
sobes.tech AI
Απάντηση από AI
Αφού το GitLab κατεβάσει τον κώδικα του αποθετηρίου στον κατάλογο εργασίας, ξεκινά η εκτέλεση της pipeline CI/CD που ορίζεται στο αρχείο .gitlab-ci.yml.
- Ανάλυση του
.gitlab-ci.yml: Ο GitLab Runner (ή ο ίδιος ο GitLab αν χρησιμοποιείται ενσωματωμένο CI) διαβάζει τη διαμόρφωση από το.gitlab-ci.yml. Αυτό το αρχείο περιγράφει τα στάδια (stages) και τις εργασίες (jobs) της pipeline. - Αρχικοποίηση του Runner: Ορίζεται ένας διαθέσιμος GitLab Runner για την εκτέλεση της pipeline. Ο Runner λαμβάνει πληροφορίες σχετικά με το αποθετήριο, το commit, το branch και τη διαμόρφωση του
.gitlab-ci.yml. - Δημιουργία περιβάλλοντος εκτέλεσης: Ο Runner προετοιμάζει το περιβάλλον για την εκτέλεση των εργασιών. Αυτό μπορεί να είναι:
- Εικονική μηχανή
- Κοντέινερ (Docker, Kubernetes)
- Αποκλειστικός διακομιστής
- Shell
- Εκτέλεση των σταδίων (stages): Η pipeline εκτελείται διαδοχικά σύμφωνα με τα στάδια που ορίζονται στο
.gitlab-ci.yml. Οι εργασίες σε ένα στάδιο μπορούν να εκτελούνται παράλληλα. - Εκτέλεση των εργασιών (jobs): Μέσα σε κάθε στάδιο, εκτελούνται οι διαμορφωμένες εργασίες. Μια εργασία περιλαμβάνει:
- Ορισμό εικόνας ή εκτελεστή (executor), αν δεν έχει οριστεί σε επίπεδο pipeline ή στην ενότητα
variables. - Κλωνοποίηση του αποθετηρίου (έχει ήδη γίνει από το GitLab, αλλά ο Runner μπορεί να εκτελέσει
git fetchήgit checkoutγια την επιθυμητή κατάσταση). - Ανάκτηση cache (αν έχει ρυθμιστεί) για ταχύτερη κατασκευή (π.χ. φόρτωση εξαρτήσεων).
- Εκτέλεση scripts (
script): Αυτό είναι το βασικό περιεχόμενο της εργασίας, όπου εκτελούνται εντολές κατασκευής, δοκιμών, ανάλυσης ή ανάπτυξης. - Φόρτωση artifacts (αν έχει διαμορφωθεί): Τα αποτελέσματα της εργασίας (π.χ. μεταγλωττισμένα δυαδικά αρχεία, αναφορές) αποθηκεύονται για μελλοντική χρήση ή φόρτωση.
- Αποθήκευση cache (αν έχει ρυθμιστεί) για ταχύτερες μελλοντικές εκκινήσεις.
- Ορισμό εικόνας ή εκτελεστή (executor), αν δεν έχει οριστεί σε επίπεδο pipeline ή στην ενότητα
- Αναφορά κατάστασης: Ο Runner στέλνει την κατάσταση εκτέλεσης κάθε εργασίας (επιτυχία, σφάλμα, ακύρωση) πίσω στο GitLab. Ο χρήστης βλέπει την πρόοδο και τα αποτελέσματα στη σελίδα της pipeline.
- Μετάβαση στο επόμενο στάδιο: Αν όλες οι εργασίες στο τρέχον στάδιο ολοκληρωθούν επιτυχώς (ή έχουν ρυθμιστεί το
allow_failure), ξεκινά το επόμενο στάδιο. Αν μια εργασία ολοκληρωθεί με σφάλμα και τοallow_failureδεν έχει οριστεί, η ολόκληρη η pipeline διακόπτεται. - Ολοκλήρωση της pipeline: Μετά την εκτέλεση όλων των σταδίων (ή σε περίπτωση σφάλματος), η pipeline ολοκληρώνεται. Τα αποτελέσματα και τα artifacts είναι διαθέσιμα μέσω του web interface του GitLab.
Παράδειγμα δομής του .gitlab-ci.yml:
// Ορίζουμε τα στάδια της pipeline
stages:
- build
- test
- deploy
// Εργασία κατασκευής στο στάδιο build
build_job:
stage: build
image: docker:latest // Χρησιμοποιούμε εικόνα Docker
script:
- echo "Κατασκευή της εφαρμογής..."
- docker build -t myapp:$CI_COMMIT_SHORT_SHA . // Κατασκευή Docker εικόνας
artifacts:
paths:
- myapp.tar // Αποθήκευση του artifact κατασκευής
// Εργασία δοκιμών στο στάδιο test
test_job:
stage: test
image: python:3.9 // Χρησιμοποιούμε εικόνα Python
script:
- echo "Εκτέλεση δοκιμών..."
- pip install -r requirements.txt
- pytest // Εκτέλεση δοκιμών
needs: ["build_job"] // Εξαρτάται από την επιτυχή ολοκλήρωση του build_job
// Εργασία ανάπτυξης στο στάδιο deploy
deploy_job:
stage: deploy
image: ubuntu:latest // Χρησιμοποιούμε εικόνα Ubuntu
script:
- echo "Ανάπτυξη της εφαρμογής..."
- echo "Ο κώδικας ανάπτυξης βρίσκεται εδώ..." // Σενάριο ανάπτυξης
only: // Εκτελείται μόνο σε commits στο master ή tags
- master
- tags
needs: ["test_job"] // Εξαρτάται από την επιτυχή ολοκλήρωση του test_job
Έτσι, το κατέβασμα του κώδικα είναι μόνο το πρώτο βήμα, ακολουθεί μια πολύπλοκη αυτοματοποιημένη διαδικασία κατασκευής, δοκιμών και ανάπτυξης, βασισμένη στη διαμόρφωση .gitlab-ci.yml.