Chapters ▾ 2nd Edition

4.8 Το Git στον διακομιστή - GitLab

GitLab

Το GitWeb είναι αρκετά απλοϊκό. Αν ψάχνουμε για έναν πιο σύγχρονο διακομιστή Git με πολλές λειτουργικότητες, υπάρχουν μερικές λύσεις ανοιχτού κώδικα που μπορούμε να εγκαταστήσουμε αντ' αυτού. Καθώς το GitLab είναι μία από τις πιο δημοφιλείς, θα δούμε την εγκατάσταση και χρήση του ως παράδειγμα. Η εγκατάσταση του GitLab είναι λίγο πιο περίπλοκη από αυτή του GitWeb και πιθανότα απαιτεί περισσότερη συντήρηση, αλλά είναι μια επιλογή με πολύ περισσότερα χαρακτηριστικά.

Εγκατάσταση

Το GitLab είναι μια διαδικτυακή εφαρμογή που βασίζεται σε βάση δεδομένων, συνεπώς η εγκατάστασή του είναι πιο απαιτητική από ότι άλλων διακομιστών Git. Ευτυχώς, αυτή η διαδικασία έχει πολύ καλή τεκμηρίωση και υποστήριξη. Το GitLab συνιστά ιδιαιτέρως την εγκατάσταση του GitLab στον διακομιστή μας μέσω του επίσημου πακέτου Omnibus GitLab.

Οι άλλες επιλογές εγκατάστασης είναι:

  • Χάρτης GitLab Helm, για χρήση με το Kubernetes.

  • Docker-οποιημένα πακέτα GitLab για χρήση με το Docker.

  • Από πηγαίο κώδικα.

  • Προμηθευτές cloud όπως οι AWS, Google Cloud Platform, Azure, OpenShift και Digital Ocean.

Για περισσότερες πληροφορίες βλ. το GitLab Community Edition (CE) readme.

Διαχείριση

Η διεπαφή διαχείρισης του GitLab είναι προσπελάσιμη μέσα από το web. Απλά οδηγούμε το πρόγραμμα περιήγησής μας στο hostname ή τη διεύθυνση IP στην οποία είναι εγκατεστημένο το GitLab και συνδεόμαστε ως χρήστης root. Ο κωδικός βασίζεται στον τύπο εγκατάστασης αλλά από προεπιλογή, ο Omnibus GitLab αυτόαματα δημιουργεί κωδικό και τον αποθηκεύει στο /etc/gitlab/initial_root_password για τουλάχιστον 24 ώρες. Για περισσότερες πληροφορίες ακουλουθούμε το εγχειρίδιο. Μόλις συνδεθούμε, κάνουμε κλικ στο εικονίδιο “Admin area” στο επάνω δεξιά μενού.

Το εικονίδιο "`Admin area`" στο μενού του GitLab
Figure 50. Το εικονίδιο “Admin area” στο μενού του GitLab

Χρήστες

Όλοι όσοι χρησιμοποιούν τον διακομιστή GitLab πρέπει να έχουν λογαριασμό χρήστη. Οι λογαριασμοί χρηστών είναι πολύ απλοί· βασικά είναι μια συλλογή προσωπικών πληροφοριών προσαρτημένα σε δεδομένα σύνδεσης. Κάθε λογαριασμός χρήστη συνοδεύεται από έναν ονοματοχώρο (namespace), το οποίο είναι μια λογική ομαδοποίηση έργων που ανήκουν σε αυτόν τον χρήστη. Εάν ο χρήστης jane είχε ένα έργο με όνομα project, η διεύθυνση URL του έργου θα ήταν http://server/jane/project.

Η οθόνη διαχείρισης χρηστών του GitLab
Figure 51. Η οθόνη διαχείρισης χρηστών του GitLab

Μπορούμε να καταργήσουμε ένα χρήστη με δύο τρόπους: Αν “μπλοκάρουμε” ενα χρήστη τον εμποδίζουμε να συνδεθεί στο στιγμιότυπο (instance) του GitLab, αλλά όλα τα δεδομένα κάτω από τον ονοματοχώρο του χρήστη θα διατηρηθούν και οι υποβολές που έχει υπογράψει με τη διεύθυνση e-mail του χρήστη θα εξακολουθούν να είναι συνδεδεμένες στο προφίλ του.

Αν “καταστρέψουμε” ένα χρήστη, τον αφαιρούμε εντελώς από τη βάση δεδομένων και το σύστημα αρχείων. Όλα τα έργα και τα δεδομένα στον ονοματοχώρο του θα διαγραφούν και οι ομάδες που ενδεχομένως του ανήκουν θα διαγραφούν επίσης. Αυτή είναι προφανώς μια πολύ πιο μόνιμη και καταστροφική ενέργεια και σπάνια θα τη χρειαστούμε.

Ομάδες

Μια ομάδα (group) στο GitLab είναι μια συλλογή έργων μαζί με δεδομένα σχετικά με τον τρόπο με τον οποίο οι χρήστες έχουν πρόσβαση σε αυτά τα έργα. Κάθε ομάδα έχει ένα ονοματοχώρο έργου (ακριβώς όπως και οι χρήστες), οπότε αν η ομάδα training έχει ένα έργο materials, η διεύθυνση URL του θα είναι http://server/training/materials.

Οθόνη διαχείρισης ομάδων του GitLab
Figure 52. Οθόνη διαχείρισης ομάδων του GitLab

Κάθε ομάδα συσχετίζεται με έναν αριθμό χρηστών, καθένας από τους οποίους έχει το δικό του επίπεδο δικαιωμάτων για τα έργα της ομάδας και την ίδια την ομάδα. Αυτά ποικίλλουν από “Guest” (επισκέπτης) (έχουν πρόσβαση μόνον σε θέματα και chat) μέχρι “Owner” (κάτοχος) (έχει πλήρης έλεγχο της ομάδας, των μελών και των έργων της). Οι τύποι δικαιωμάτων είναι πάρα πολλοί για να τους αναφέρουμε εδώ, αλλά το GitLab έχει έναν σχετικό χρήσιμο σύνδεσμο στην οθόνη διαχείρισης.

Έργα

Ένα έργο του GitLab αντιστοιχίζεται πάνω-κάτω σε ένα αποθετήριο Git. Κάθε έργο ανήκει σε ένα μοναδικό ονοματοχώρο· είτε σε έναν χρήστη είτε σε μια ομάδα. Αν το έργο ανήκει σε χρήστη, ο ιδιοκτήτης του έργου έχει άμεσο έλεγχο για το ποιος έχει πρόσβαση στο έργο· αν το έργο ανήκει σε μια ομάδα, θα ισχύουν τα δικαιώματα χρήστη της ομάδας.

Κάθε έργο έχει επίσης ένα επίπεδο ορατότητας, το οποίο ελέγχει ποιος έχει πρόσβαση στη σελίδα και το αποθετήριο αυτού του έργου. Εάν ένα έργο είναι Private (ιδιωτικό), ο κάτοχος του έργου πρέπει να παρέχει ρητά πρόσβαση σε συγκεκριμένους χρήστες. Ένα Internal (εσωτερικό) έργο είναι ορατό σε οποιονδήποτε συνδεδεμένο χρήστη και ένα Public (δημόσιο) έργο είναι ορατό σε οποιονδήποτε. Σημειώνουμε ότι το επίπεδο ορατότητας του έργου ελέγχει τόσο την πρόσβαση git fetch, όσο και την πρόσβαση στη διαδικτυακή διεπαφή χρήστη (web UI) για αυτό το έργο.

Άγκιστρα

Το GitLab περιλαμβάνει υποστήριξη για άγκιστρα (hooks), τόσο σε επίπεδο έργου όσο και σε επίπεδο συστήματος. Και για τα δύο και κάθε φορά που προκύπτουν σχετικά γεγονότα, ο διακομιστής GitLab θα εκτελέσει ένα HTTP POST με κάποια περιγραφικά JSON. Αυτός είναι ένας πολύ καλός τρόπος σύνδεσης των αποθετηρίων μας Git και του στιγμιότυπου GitLab με τον υπόλοιπο αυτοματισμό της ανάπτυξης του έργου, όπως οι διακομιστές CI, οι χώροι συνομιλίας (chat rooms) και τα εργαλεία ανάπτυξης.

Βασική χρήση

Το πρώτο πράγμα που θα θελήσουμε να κάνουμε με το GitLab είναι να δημιουργήσουμε ένα νέο έργο. Αυτό επιτυγχάνεται με κλικ στο εικονίδιο “+” στη γραμμή εργαλείων. Θα μας ζητηθεί το όνομα του έργου, ο ονοματοχώρος στον οποίο θέλουμε να ανήκει και το επίπεδο ορατότητάς του. Τα περισσότερα στοιχεία από αυτά δεν είναι μόνιμα και μπορούν να επαναρυθμιστούν αργότερα στις ρυθμίσεις. Κάνουμε κλικ στο κουμπί “Create Project” και τελειώσαμε.

Από τη στιγμή που το έργο αρχίζει να υπάρχει, το πιθανότερο είναι να θελήσουμε να το συνδέσουμε με ένα τοπικό αποθετήριο Git. Κάθε έργο είναι προσβάσιμο μέσω HTTPS ή SSH, καθένα από τα οποία μπορεί να χρησιμοποιηθεί για να οριστούν οι ρυθμίσεις κατά τη διαμόρφωση ενός απομακρυσμένου Git. Οι διευθύνσεις URL είναι ορατές στο επάνω μέρος της αρχικής σελίδας του έργου. Αν έχουμε ένα τοπικό αποθετήριο, με την παρακάτω εντολή θα δημιουργήσουμε ένα απομακρυσμένο αποθετήριο με όνομα gitlab στη φιλοξενούμενη τοποθεσία:

$ git remote add gitlab https://server/namespace/project.git

Εάν δεν έχουμε τοπικό αντίγραφο του αποθετηρίου, μπορούμε απλά να τρέξουμε το εξής:

$ git clone https://server/namespace/project.git

Η διεπαφή χρήστη web παρέχει πρόσβαση σε πολλές χρήσιμες προβολές του ίδιου του αποθετηρίου. Η αρχική σελίδα του κάθε έργου παρουσιάζει την πρόσφατη δραστηριότητα και οι συνδέσεις στην κορυφή θα μας οδηγήσουν σε προβολές των αρχείων του έργου και του αρχείου καταγραφής υποβολών.

Συνεργασίες

Ο απλούστερος τρόπος συνεργασίας σε ένα έργο GitLab είναι να δώσουμε στον άλλο χρήστη δικαίωμα άμεσης ώθησης στο αποθετήριο Git. Μπορούμε να προσθέσουμε έναν χρήστη σε ένα έργο πηγαίνοντας στην ενότητα “Members” (Μέλη) των ρυθμίσεων του συγκεκριμένου έργου και δίνοντας στον νέο χρήστη ένα επίπεδο πρόσβασης (τα διάφορα επίπεδα πρόσβασης αναλύονται λίγο στην ενότητα Ομάδες). Παρέχοντας στον χρήστη επίπεδο πρόσβασης “Developer” (προγραμματιστή) ή ανώτερο, ο χρήστης μπορεί να ωθήσει υποβολές και κλάδους απευθείας στο αποθετήριο.

Ένας άλλος, πιο ελεγχόμενος τρόπος συνεργασίας είναι με τη χρήση αιτήσεων συγχώνευσης (merge requests). Αυτή η δυνατότητα επιτρέπει σε κάθε χρήστη που μπορεί να δει ένα έργο να συνεισφέρει σε αυτό με ελεγχόμενο τρόπο. Οι χρήστες με άμεση πρόσβαση μπορούν απλά να δημιουργήσουν έναν κλάδο, να ωθήσουν υποβολές σε αυτόν και να θέσουν ένα αίτημα συγχώνευσης από τον κλάδο τους στον κλάδο master ή σε οποιονδήποτε άλλο κλάδο. Οι χρήστες που δεν έχουν δικαίωμα ώθησης σε ένα αποθετήριο μπορούν να το αποσχίσουν (fork) (δηλ. να δημιουργήσουν το δικό τους αντίγραφο), να ωθούν υποβολές σε αυτό το αντίγραφο και να κάνουν αίτημα συγχώνευσης από το αντίγραφό τους στο κύριο έργο. Αυτό το μοντέλο επιτρέπει στον κάτοχο να έχει τον πλήρη έλεγχο του τι πηγαίνει στο αποθετήριο και πότε, καθώς επιτρέπει συνεισφορές και από μη αξιόπιστους χρήστες.

Τα αιτήματα συγχώνευσης και τα ζητήματα που προκύπτουν είναι τα κύρια θέματα μακροχρόνιων συζητήσεων στο GitLab. Κάθε αίτηση συγχώνευσης επιτρέπει μια γραμμή-προς-γραμμή συζήτηση για την προτεινόμενη αλλαγή (η οποία υποστηρίζει ένα ελαφρύ είδος αναθεώρησης κώδικα) καθώς και ένα νήμα γενικής συζήτησης. Και οι δύο μπορούν να ανατεθούν σε χρήστες ή να οργανωθούν σε ορόσημα (milestones).

Αυτή η ενότητα επικεντρώθηκε κυρίως στις λειτουργίες του GitLab που σχετίζονται με το Git, αλλά ως ώριμο έργο, παρέχει κι άλλες πολλές λειτουργικότητες που βοηθούν την ομάδα μας να συνεργάζεται, όπως τα εργαλεία wiki και τα εργαλεία συντήρησης του συστήματος. Ένα πλεονέκτημα για το GitLab είναι από τη στιγμή που θα εγκαταστήσουμε και ξεκινήσουμε τον διακομιστή, σπάνια θα χρειαστεί να τροποποιήσουμε κάποιο αρχείο παραμετροποίησης ή πρόσβασης στον διακομιστή μέσω SSH· σχεδόν όλη η διαχείριση και γενική χρήση μπορούν να γίνουν μέσω της διεπαφής στο πρόγραμμα περιήγησης.