GitLab

Willemers Informatik-Ecke

Die Bücher des Autors:
C++ Der Einstieg
Python
Java
Linux-Server für Einsteiger
Coding for fun mit C++
2017-02-28
Weitere Git-Themen: GitLab bietet eine Benutzerverwaltung für Git mit integrierter Web-Oberfläche. Diese wiederum integriert eine Issues-Verwaltung und ein Wiki. Es können Repositories mit verschiedenen Öffentlichkeitseigenschaften versehen werden. Benutzer werden zu Gruppen zusammengefasst und erhalten verschiedene Rollen für die Repositories.

Vorbereitungen der Installation

Das Paket GitLab befindet sich nicht in den Linux-Distributionen, sondern muss als Fremdpaketquelle eingebunden werden. Die Installation erfolgte auf Basis eines Debian-Systems. Bei Ubuntu wird es feine Unterschiede geben.

Postfix und andere Pakete

Debian verwendet standardmäßíg Exim als Mail-System. Für GitLab wird allerdings Postfix eingesetzt. Darum sollte vor einer Installation von GitLab Postfix installiert. Wo man gerade dabei ist, werden auch noch ein paar andere Pakete installiert, die später gebraucht werden.
apt-get install curl openssh-server ca-certificates postfix
Während der Installation von Postfix wird einmal nach dem E-Mail-Namen gefragt. Hier wird gitlab eingegeben, ggf. gefolgt von dem Namen der Domain (DNS) des Rechners.

Darüber hinaus wird gefragt, in welcher Konfiguration Postfix arbeitet. Hier wurde Internet mit Smarthost angegeben.

Postfix-Konfiguration mit GMX-Konto

Natürlich wäre es am elegantesten, GitLab in das Mail-System der Domain einzubinden. Wenn es ein solches aber nicht gibt oder der Zugriff darauf nicht so einfach ist, tut es auch ein normales GMX-Konto.

Die Konfiguration erfolgt in der Datei /etc/postfix/main.cf. Darin werden folgende Einstellungen angepasst:

mydestination =
relayhost = mail.gmx.net:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
Die Datei muss angelegt werden. Darin werden die Zugangsdaten für das Smarthost-E-Mail-Konto abgelegt. Der erste Begriff muss mit dem relayhost übereinstimmen. Es folgt Benutzer (bei GMX identisch zur kompletten E-Mail-Adresse), Doppelpunkt und Passwort
mail.gmx.net gitlabadresse@gmx.de:geheimespasswort
Nach jeder Änderung muss die Datei in eine db-Datei geändert werden:
postmap sasl_password
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = encrypt
sender_canonical_maps = hash:/etc/postfix/sender_canonical
In der neuen Datei sender_canonical wird die Absende-Adresse umgebogen, da GMX nur Mails mit dem Absender der eigenen E-Mail-Adresse für den Versand akzeptiert, um Spam zu verhindern. Hier muss der Benutzer gitlab eingetragen werden, da dieser von GitLab als Absender für die Kontakte zu den Benutzern verwendet wird. Übrigens gibt es in der /etc/password keinen Eintrag für einen Benutzer gitlab.
gitlab gitlabadresse@gmx.de
linux gitlabadresse@gmx.de
Der zweite Eintrag ist nur für den Benutzer linux, der im Anschluss zum Testen der Postfix-Konfiguration benutzt wird.

Nach jeder Änderung muss die Datei in eine db-Datei geändert werden:

postmap sender_canonical
Nun muss Postfix die Konfiguration neu laden.
postfix reload

Test der Postfix-Umgebung

Für den Test wird ein Benutzer linux angelegt. Dieser sendet eine Testmail an eine Internet-Adresse.
su - linux
mail irgendeineadresse@web.de
Subject: testvongitlab
huhu
.
Cc:
Die Mail sollte nun beim Empfänger ankommen. Absender ist gitlabadresse@gmx.de. Sollte das nicht funktionieren, gibt die Datei /var/log/mail.log die Fehlermeldungen, die weiterhelfen. Meist ist das GMX-Konto mit dem Absender unzufrieden. Das muss dann in der Datei sender_canonical nachjustiert werden.

Installation über Fremdquelle

Die Seite www.gitlab.com bietet einen Skript an, der die Erweiterung der Paketquellen am Debian-System durchführt.
wget https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh
chmod 775 script.deb.sh
./script.deb.sh
Alternativ kann aich in folgenden Schritten vorgegangen werden:
  1. Die Zeilen

    deb https://packages.gitlab.com/gitlab/gitlab-ce/debian stretch main
    deb-src https://packages.gitlab.com/gitlab/gitlab-ce/debian stretch main
    

    in der Datei /etc/apt/sources.list eintragen oder eine neue Datei mit diesen Zeilen im Verzeichnis /etc/apt/sources.d anlegen.

  2. Den folgenden Befehl als root ausführen:

    wget -qO - https://packages.gitlab.com/gpg.key | apt-key add -
    
  3. Die Paketliste aktualisieren:
    apt-get update
    
So verwendet Debian auch gitlab.com als Paketquelle. Nun kann GitLab über die üblichen Linux-Installationswerkzeuge geladen werden.
apt-get install gitlab-ce
gitlab-ctl reconfigure

Hostname

GitLab verwendet für die URLs, die es ausgibt, den Hostnamen des Rechners, auf dem es installiert ist. Da die URLs typischerweise von außen angesprochen werden, muss der interne Hostname auch im Netzwerk bekannt sein. Dazu muss dieser Namen entweder im lokalen DNS eingetragen sein oder von jedem Benutzer in der Host-Datei hinterlegt werden. Diese befindet sich bei Linux in /etc/hosts und bei Windows in C:/Windows/System32/drivers/etc/hosts.

Erstanmeldung des Administrators

Nun muss das Passwort für den GitLab-Administrator gesetzt werden. Dazu wird der Browser verwendet. In die Adresszeile wird der Name oder die IP-Adresse des PCs verwendet, auf dem GitLab installiert ist.

GitLab fragt sofort nach einem Passwort und lässt sich dieses bestätigen. Es muss mindestens acht Buchstaben umfassen. Direkt anschließend folgt eine Anmeldemaske, in der man als Benutzer root und als Passwort das eben definierte Passwort einträgt.

Mit diesem Administratorzugang kann man beliebige Benutzer anlegen, die selbst auch wieder Administratorrechte bekommen können.

Benutzer anlegen

Ein Administrator kann einen Benutzer anlegen. Dazu wird ein Benutzername und eine gültige E-Mail-Adresse benötigt.

Dem neuen Benutzer können verschiedene Rechte zugeordnet werden:

Der neue Benutzer erhält eine Mail mit einer URL, über die er die Anmeldung vervollständigt. Er wird dann aufgefordert, ein Passwort anzugeben und dieses zu bestätigt.

Der neue Benutzer wird immer wieder aufgefordert, seinen SSH-Key anzugeben. Er kann das Eingabefeld für den SSH-Key auch in seinen Profile Settings festlegen, die er über das Menü neben seinem Avatar rechts oben findet. Der SSH-Key ermöglicht den Umgang mit GitLab ohne Passwort. Dazu öffnet der Benutzer die Datei id_rsa.pub im Verzeichnis .ssh und kopiert den Inhalt per Copy & Paste (Strg-C / Strg-V) in das Eingabefeld im Browser.

Einen SSH-Key erzeugt der Benutzer über den Befehl ssh-keygen aus der Shell bzw. Git-Shell.

Gruppen

Über das Menü mit den drei Streifen auf der linken Seite kann jeder Benutzer, dem dieses Recht zugeteilt wurde, eine Gruppe anlegen. Dazu wählt er den Menüpunkt Groups an und klickt dann auf den Button New Group.

Projekt (Repository)

Direkt nach dem Anmelden erhält der Benutzer die Möglichkeit, ein neues Repository (Projekt) über den Button New Project anzulegen. Das Projekt bekommt einen Namen und eine Beschreibung (Project description). Mit der Angabe der Sichtbarkeit (Visibility Level) kann der Anleger den Zugriff begrenzen:
Private
Der Zugriff auf das Projekt muss anderen Benutzern explizit vom Besitzer zugewiesen werden.
Internal
Jeder im GitLab angemeldete Benutzer darf das Projekt clonen.
Public
Um einen Clone auf das Projekt zu erzeugen, reicht die Kenntnis der URL. Man muss nicht in GitLab angemeldet sein.
Dem Projekt können Gruppen und Benutzer zugewiesen werden, die verschiedene Rollen für das Projekt übernehmen.
Guest
Er kann die Issues und das Wiki zum Projekt lesen und darf Kommentare hinterlassen, kommt aber nicht an den Code heran.
Reporter
Er kann den Code des Projekts einsehen und die Commit-Kommentare lesen, kann aber am Projekt nichts verändern.
Developer
Er darf einen Push auf den Branch des Projekts setzen, sofern dieser nicht protected ist. Da der Branch master bei GitLab zunächst protected ist, muss der Master oder der Owner einen neuen Branch für die Bearbeitung der Developer anlegen.
Master
Er darf auch einen protected Branch per Push verändern oder einen neuen Branch von einem protected Branch erzeugen. Er ist auch dafür zuständig, einen fertigen Branch mit dem master per merge zu vereinen.
Owner
Er darf mit dem Projekt machen, was er will. Es ist seines.
Ist ein Benutzer selbst für ein Projekt eingetragen als auch in einer Gruppe, die zum Projekt gehört, nimmt er die jeweils stärkere Rolle ein.

Branch anlegen

Im GitLab wechselt man zu Repostitory-Branch. Hier sieht man die aktiven Branches.

Um aus einem master-Branch einen Branch anzulegen, der auch von einem Developer bearbeitet werden kann, klickt man auf New Branch. In einem neuen Bildschirm entsteht ein Dialog, in dem der Branch einen Namen bekommen kann und in dem aus einer Klappbox ausgewählt wird, auf der Basis welchen Branches er basiert. Zu Anfang ist dies der master-Branch.

Namen eingeben, Basis-Branch auswählen und Create branch anklicken.

Um den neu erzeugten Branch zum Default-Branch zu machen, klickt man unter Repository-Branch den Link project settings an. Dort steht neben Default Branch ein Button Expand. Darunter kann in einer Klappbox ein beliebiger Branch zum Default erklärt werden. Dann klickt man Save changes an.

Datensicherung

Eine Datensicherung ist nicht ganz trivial, da GitLab Datenbanken verwendet. Diese können nicht zu jedem beliebigen Zeitpunkt einfach kopiert werden. Darum muss die von GitLab angebotene Datensicherung verwendet werden.

Eine GitLab-Sicherung kann nur von einem GitLab gleicher Version wieder rekonstruiert werden. Nach einer Aktualisierung von GitLab sind die alten Datensicherungen sofort wertlos! Muss der Server komplett wiederhergestellt werden, muss ein GitLab-Version installiert werden können, wie sie auf dem alten Server vorlag.

Sicherung der GitLab-Version selbst

Da die Sicherung nur von einem GitLab gleicher Version zurückgeholt werden kann, muss diese Version gesichert werden und garantiert werden, dass die installierte Version sich nicht ändert.
  1. Update von gitlab-ce muss abgeschaltet werden.
    rm /etc/apt/sources.list.d/gitlab\_gitlab-ce.list
    apt-get update
    
  2. Installiertes Paket gitlab-ce muss gesichert werden.
    cp /var/cache/apt/archives/gitlab-ce* sicherungsverzeichnis
    

Sicherung der Daten

Ein Backup wird durch den folgenden Befehl erstellt:
gitlab-rake gitlab:backup:create
In der Datei /etc/gitlab/gitlab.rb ist typischerweise der Pfad /var/opt/gitlab/backups als Standardsicherungspfad angegeben. Dort wird bei jedem Aufruf eine tar-Datei abgelegt.

Wiederherstellung der Daten

Ein Restore ist nur auf einem vollständig installierten GitLab der gleichen Version möglich. Ist die GitLab-Installation nicht zu Schaden gekommen, kann eine einfache Rücksicherung der Daten vorgenommen werden.
gitlab-ctl reconfigure
gitlab-ctl start
Im Verzeichnis des Backups /var/opt/gitlab/backups wird die Sicherungsdatei abgelegt, die rekonstruiert werden soll. Die Datei muss dem Benutzer git gehören.
cp 1393513186_gitlab_backup.tar /var/opt/gitlab/backups/
chown git 1393513186_gitlab_backup.tar
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-rake gitlab:backup:restore BACKUP=1393513186
Die Nummer hinter BACKUP enstspricht der Nummer der Sicherungsdatei. Anschließend werden die Prozesse wieder gestartet und im Anschluss die Konsistenz geprüft. Bei der Ausführung der Rücksicherung erfragt GitLab die Erlaubnis (yes) zum Löschen aller bisherigen Datenbanktabellen und weiterer Daten.
gitlab-ctl start
gitlab-rake gitlab:check SANITIZE=true

Wiederherstellung der GitLab-Version

Wenn die Version von gitlab wechselt, sind alle Sicherungen wertlos. Darum muss die Datei, die das Debian-Paket enthält, gesichert worden sein. Diese Version wird mit dem Befehl dpkg installiert.
dpkg -i gitlab-ce\_xx.yy.z-ce.0\_amd64.deb
Anschließend müssen alle Vorgänge der Neuinstallation wie beispielsweise die Postfix-Installation auch durchgeführt werden. Danach kann die eigentliche Datensicherung zurückgeholt werden.

Update

Wie bei der Datensicherung erwähnt, kann eine Datensicherung nicht mehr geladen werden, wenn GitLab aktualisiert wurde. Aus diesem Grund muss ein Update immer mit vollem Datenbestand durchgeführt werden.
gitlab-rake db:migrate
gitlab-ctl restart

Links


Homepage (C) Copyright 2017 Arnold Willemer