Sobes.tech
Middle

Τι συμβαίνει μετά το κατέβασμα του κώδικα από το GitLab;

sobes.tech AI

Απάντηση από AI

Αφού το GitLab κατεβάσει τον κώδικα του αποθετηρίου στον κατάλογο εργασίας, ξεκινά η εκτέλεση της pipeline CI/CD που ορίζεται στο αρχείο .gitlab-ci.yml.

  1. Ανάλυση του .gitlab-ci.yml: Ο GitLab Runner (ή ο ίδιος ο GitLab αν χρησιμοποιείται ενσωματωμένο CI) διαβάζει τη διαμόρφωση από το .gitlab-ci.yml. Αυτό το αρχείο περιγράφει τα στάδια (stages) και τις εργασίες (jobs) της pipeline.
  2. Αρχικοποίηση του Runner: Ορίζεται ένας διαθέσιμος GitLab Runner για την εκτέλεση της pipeline. Ο Runner λαμβάνει πληροφορίες σχετικά με το αποθετήριο, το commit, το branch και τη διαμόρφωση του .gitlab-ci.yml.
  3. Δημιουργία περιβάλλοντος εκτέλεσης: Ο Runner προετοιμάζει το περιβάλλον για την εκτέλεση των εργασιών. Αυτό μπορεί να είναι:
    • Εικονική μηχανή
    • Κοντέινερ (Docker, Kubernetes)
    • Αποκλειστικός διακομιστής
    • Shell
  4. Εκτέλεση των σταδίων (stages): Η pipeline εκτελείται διαδοχικά σύμφωνα με τα στάδια που ορίζονται στο .gitlab-ci.yml. Οι εργασίες σε ένα στάδιο μπορούν να εκτελούνται παράλληλα.
  5. Εκτέλεση των εργασιών (jobs): Μέσα σε κάθε στάδιο, εκτελούνται οι διαμορφωμένες εργασίες. Μια εργασία περιλαμβάνει:
    • Ορισμό εικόνας ή εκτελεστή (executor), αν δεν έχει οριστεί σε επίπεδο pipeline ή στην ενότητα variables.
    • Κλωνοποίηση του αποθετηρίου (έχει ήδη γίνει από το GitLab, αλλά ο Runner μπορεί να εκτελέσει git fetch ή git checkout για την επιθυμητή κατάσταση).
    • Ανάκτηση cache (αν έχει ρυθμιστεί) για ταχύτερη κατασκευή (π.χ. φόρτωση εξαρτήσεων).
    • Εκτέλεση scripts (script): Αυτό είναι το βασικό περιεχόμενο της εργασίας, όπου εκτελούνται εντολές κατασκευής, δοκιμών, ανάλυσης ή ανάπτυξης.
    • Φόρτωση artifacts (αν έχει διαμορφωθεί): Τα αποτελέσματα της εργασίας (π.χ. μεταγλωττισμένα δυαδικά αρχεία, αναφορές) αποθηκεύονται για μελλοντική χρήση ή φόρτωση.
    • Αποθήκευση cache (αν έχει ρυθμιστεί) για ταχύτερες μελλοντικές εκκινήσεις.
  6. Αναφορά κατάστασης: Ο Runner στέλνει την κατάσταση εκτέλεσης κάθε εργασίας (επιτυχία, σφάλμα, ακύρωση) πίσω στο GitLab. Ο χρήστης βλέπει την πρόοδο και τα αποτελέσματα στη σελίδα της pipeline.
  7. Μετάβαση στο επόμενο στάδιο: Αν όλες οι εργασίες στο τρέχον στάδιο ολοκληρωθούν επιτυχώς (ή έχουν ρυθμιστεί το allow_failure), ξεκινά το επόμενο στάδιο. Αν μια εργασία ολοκληρωθεί με σφάλμα και το allow_failure δεν έχει οριστεί, η ολόκληρη η pipeline διακόπτεται.
  8. Ολοκλήρωση της 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.