Git
Chapters ▾ 2nd Edition

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

GitLab

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

Εγκατάσταση

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

Υπάρχουν περισσότερες από μία μέθοδοι που μπορούμε να ακολουθήσουμε για να εγκαταστήσουμε το GitLab. Για να κάνουμε κάτι γρήγορα και να τρέξουμε γρήγορα, μπορούμε να κατεβάσουμε ένα είδωλο εικονικής μηχανής (virtual machine image) ή ένα πρόγραμμα άμεσης εγκατάστασης https://bitnami.com/stack/gitlab και να πειράξουμε τη διαμόρφωση ώστε να ταιριάξει με το συγκεκριμένο περιβάλλον μας. Μια ωραία πινελιά που έχει συμπεριλάβει το Bitnami είναι η οθόνη σύνδεσης (πρόσβαση με πληκτρολόγηση Alt+→)· μας λέει τη διεύθυνση IP και το προεπιλεγμένο όνομα χρήστη και κωδικό πρόσβασης για το εγκατεστημένο GitLab.

Η οθόνη σύνδεσης της εικονικής μηχανής του Bitnami GitLab.
Figure 50. Η οθόνη σύνδεσης της εικονικής μηχανής του Bitnami GitLab.

Για ο,τιδήποτε άλλο, ακολουθούμε τις οδηγίες στο readme του GitLab Community Edition, το οποίο μπορούμε να βρούμε στη διεύθυνση https://gitlab.com/gitlab-org/gitlab-ce/tree/master. Εκεί θα βρούμε βοήθεια για την εγκατάσταση του GitLab χρησιμοποιώντας συνταγές Chef, μια εικονική μηχανή για το Digital Ocean και πακέτα RPM και DEB (τα οποία όταν γράφεται το παρόν κείμενο βρίσκονται σε έκδοση beta). Υπάρχει επίσης “ανεπίσημη” καθοδήγηση για τη λειτουργία του GitLab με λειτουργικά συστήματα πέρα από τα συνήθη και βάσεις δεδομένων, ένα script για πλήρως χειροκίνητη εγκατάσταση και πολλά άλλα θέματα.

Διαχείριση

Η διεπαφή διαχείρισης του GitLab είναι προσπελάσιμη μέσα από το διαδίκτυο. Απλώς οδηγούμε το πρόγραμμα περιήγησής μας στο hostname ή τη διεύθυνση IP στην οποία είναι εγκατεστημένο το GitLab και συνδεόμαστε ως χρήστης admin. Το προεπιλεγμένο όνομα χρήστη είναι admin@local.host και ο προεπιλεγμένος κωδικός πρόσβασης είναι` 5iveL!Fe` (θα μας ζητηθεί να τον αλλάξουμε αμέσως μόλις τον εισάγουμε). Μόλις συνδεθούμε, κάνουμε κλικ στο εικονίδιο “Admin area” στο επάνω δεξιά μενού.

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

Χρήστες

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

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

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

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

Ομάδες

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

Οθόνη διαχείρισης ομάδων του GitLab.
Figure 53. Οθόνη διαχείρισης ομάδων του 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 UI παρέχει πρόσβαση σε πολλές χρήσιμες προβολές του ίδιου του αποθετηρίου. Η αρχική σελίδα του κάθε έργου παρουσιάζει πρόσφατη δραστηριότητα και οι συνδέσεις στην κορυφή θα μας οδηγήσουν σε προβολές των αρχείων του έργου και του αρχείου καταγραφής εργασιών.

Συνεργασίες

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

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

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

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