GitLab Erklärungen

Version 118.1 by pmeyer on 2025/09/11 23:35

SoftwareprojektLogo.png

Ab dem Wintersemester 2025/2026 wird die Projektstrukturierung und der Scrum-Prozess in GitLab durchgeführt. Für die wichtigsten, grundlegendsten Funktion gibt es nachfolgend als Einstiegshilfe einige Erklärungen. 

Issue/Task-Erstellung in GitLab

Für die Erstellung von Issues (User-Stories) oder Tasks (Aufgaben) wird in der Projektnavigationsleiste der Reiter "Issues" angeklickt und nachfolgend die Option "New issue" ausgewählt.

Issue1.png

Anschließend öffnet sich ein neues Fenster mit vielen Option. Hierbei kann ein Typ, ein Titel, eine Beschreibung und viele weitere unterschiedlichen Funktionen festgelegt werden. 

Als "Type" stehen drei Optionen zur Auswahl:

  • "Incident" - Ein Zwischenfall/Störung
  • "Issue" - Im SWP eine User-Story (siehe User-Stories
  • "Task" - Eine Aufgabe

Im unten gezeigtem Beispiel wird ein Issue gewählt und mit einem Titel (Name der User-Story) und einer Beschreibung (Akzeptanzkriterien) versehen.

Zusätzlich ist es möglich den Status (bspw. "To do", "Done", "In progress" etc), den Bearbeiter (ein oder mehrere Gruppenmitglieder), ein oder mehrere Labels, einen Meilenstein (siehe: ), Schätzungen und viele weitere Funktionen einzustellen. Anschließend werden die Angaben mit dem "Create issue" Button bestätigt.

Issue2.png

Es besteht im Anschluss direkt die Option sogenannte "Child items" hinzuzufügen. Dies ist besonders sinnvoll wenn die User-Story relativ umfangreich ist und somit besser in kleinere Arbeitspakete (bzw. Aufgaben) zerteilt werden sollte. Hierfür wird der "Add"-Button und entweder "New task" oder "Existing task" ausgewählt. Somit können entweder neue Aufgaben formuliert (wie im kommenden Beispiel) oder bestehende hinzugefügt werden.

Issue3.png

Hier wurde als Aufgabe das Feld für die Eingabe definiert. Anschließend wurde die Eingabe mit "Create task" bestätigt.

Issue4.png

Nachdem alle Informationen eingepflegt und ausführlich beschrieben wurden, ist das Issue vorerst fertig. 

Issue5.png

Status bei Issues

In GitLab werden standardmäßig fünf verschiedene Statusformen angeboten. Diese Optionen sind:

  • To do (wird bei der Issue Erstellung standardmäßig ausgewählt)
  • In progress
  • Done
  • Won't do
  • Duplicate

Diese Statusformen werden genutzt um eine Sortierung und/oder Priorisierung der Issues zu ermöglichen. Zusätzlich dienen diese aber auch als Orientierung für das gesamte Projektteam. Somit weiß jedes Gruppenmitglied was erledigt ist und was noch erledigt werden muss.

Issue Status 1.png

Zur Status Änderung wird einfach die "Edit"-Option betätigt und anschließend öffnet sich ein Optionsmenü. Die gewünschte Option muss nur noch bestätigt werden und der neue Status wird festgelegt.

Issue Status 2.png

Issue Status 3.png

Meilensteine und Epics

Im Laufe des Softwareprojektes werden eine Menge an Issues erstellt. Damit der Überblick über die Vielzahl an Issues nicht verloren geht und somit der Projektfortschritt nicht potenziell gefährdet wird, werden im Softwareprojekt mit Meilensteinen (siehe Meilensteine) und Epics gearbeitet. In GitLab werden die Meilensteine mit der Funktion "Milestones" und die Labels mit der Funktion "Labels" umgesetzt. Diese Option ist im Reiter "Manage" und anschließend unter "Labels" vorzufinden. 

Meilensteine

Um einen neuen Meilenstein zu erstellen, wird in der Projektnavigationsleiste der Reiter "Milestones" angeklickt und nachfolgend die Option "New milestone" ausgewählt.

Meilenstein1.1.png

Nach der Erstellung wird der Meilenstein mit einem Titel, einem Start- sowie Enddatum und einer Beschreibung versehen. In der Beschreibung müssen die umzusetzenden Funktionen aufgelistet werden (Ziel des Meilensteins). Bestätigt wird die Erstellung mit der "Create milestone"-Funktion.

Meilenstein2.png

Meilenstein3.png

Epics

Um ein neues Epic zu erstellen, wird in der Projektnavigationsleiste der Reiter "Labels" angeklickt und nachfolgend die Option "New Label" ausgewählt.

Label 1.png

Das neue Epic wird mit einem Titel, einer Beschreibung und einer Farbe versehen. Bestätigt wird die Erstellung mit der "Create label"-Funktion.

Epic2.png

Label1.png

Bei der Issue-Erstellung/Bearbeitung können die erstellten Labels/Meilensteine jetzt mit den neuen/bestehenden Issues verknüpft werden. Dies erfolgt trivial zur Status-Option.

Issue Label 2.png

Label 4.png

Issue Label 3.png


Product-Backlog

Die erstellten Issues werden automatisch nach der Erstellung dem Product-Backlog (siehe Product-Backlog) hinzugefügt. Der Product-Backlog ist eine Liste mit allen erstellten und unbearbeiteten Issues. Dieser ist im GitLab unter dem Reiter "Issue boards" vorzufinden. 

ProductBacklog1.png

ProductBacklog2.png

Pflege/Priorisierung des Product-Backlogs

Die Pflege des Product-Backlogs (siehe Pflege) ist in GitLab sehr einfach durchzuführen. Hierfür werden die Issues einfach per "Drag and Drop" (Ziehen und Ablegen) in die gewünschte Ordnung bzw. Priorisierung gebracht. Im ersten Beispiel war die Reihenfolge der Issues #1,#3,#4,#5,#6,#7 und für das Projekt unsortiert. Nach der Sortierung ist die Reihenfolge der Issues #7,#6,#5,#4,#3,#1 (Sortierung willkürlich gewählt und dient nur zu Anschauungszwecke).

ProductBacklog3.png

Erstellung neuer Listen

In GitLab können die Listen auch genutzt werden um beispielsweise Meilensteine oder Epics darzustellen (siehe Meilensteine und Epics). Auch der Status der Issues kann dargestellt werden (siehe Status). Hierfür wird einfach die "New list"-Funktion genutzt.

Liste1.png

In der sich öffnenden Option wird jetzt der Status "in progress" ausgewählt und mit der "Add to board"-Funktion bestätigt.

Liste2.png

Liste3.png

Zusätzlich werden zur Veranschaulichung Listen für die Meilensteine- und Epic-Label erstellt.

Liste4.png

Liste5.png

Liste6.png


Erstellung eines Sprints

In GitLab erfolgt die Erstellung eines Sprints in sogenannten "Iterationen" (Wiederholungen). Diese Option ist in der Gruppennavigationsleiste unter dem Reiter "Iteration" vorzufinden. Um einen neuen Sprint zu erstellen wird die "New iteration cadence"-Option ausgewählt.

Iteration1.png

Damit ein neuer Sprint erstellt werden kann, wird der Sprint mit einem Titel und einer optionalen Beschreibung versehen. Das Start- sowie Enddatum wird einmalig festgelegt. Anschließend wird die Dauer des Sprints in Wochen angegeben. Dieser Zeitraum ist für jeden weiteren Sprint fest. Desweiteren kann eingestellt werden, wie viele kommende Iterationen geplant werden können.  Die "Roll over" Funktion überträgt nicht fertiggestellte User Stories/Aufgaben automatisch in den nächsten Sprint. Mit der "Create cadence"-Funktion wird die Iteration und somit der Sprint erstellt.

Iteration2.1.png

Iteration3.1.png

Sprint-Backlog

Jetzt wurde erfolgreich ein Sprint erstellt. Jedoch fehlen bisher noch die Issues die benötigt werden um das Sprintziel zu erreichen. Dafür wird erneut der Reiter "Issue boards" (der Product-Backlog) angesteuert. Anschließend wird die Funktion "New list" ausgewählt.

Sprint4.1.png

Hierbei werden wieder verschiedene Optionen angeboten. Für die Erstellung eines Sprints bzw. der Durchführung der Sprintplanung, wird die Option "Milestone" und der eben erstellte Sprint als "Value" ausgewählt. Anschließend wird der Vorgang durch die "Add to board"-Funktion bestätigt.

Sprint5.png

Sprint6.1.png

Somit wurde erfolgreich ein sogenannter Sprint-Backlog (siehe Informationen zu Scrum) erstellt. In der Sprint-Planungsphase wird vom kompletten Projektteam festgelegt, welche Issues im Sprint umgesetzt werden sollen um das selbst definierte Sprint-Ziel zu erreichen. Nachdem das Team sich geeinigt hat, werden die Issues aus dem Product-Backlog, per "Drag and Drop" (Ziehen und Ablegen) in dem Sprint-Backlog abgelegt.

Sprint8.png

Schätzungen

Anschließend müssen die Issues geschätzt werden (siehe Schätzen). Dieser Vorgang dient der Schärfung des Verständnisses des gesamtem Projektteams. Hierbei ist es wichtig sich auf eine Werteskala (bspw. Fibonacci) zu einigen (diese sollte über die gesamte Projektdauer beibehalten werden). Die Ergebnisse werden dann direkt in den Issues unter dem Punkt "Weight" festgehalten.

SprintS.png

Die Sprint-Planung ist somit abgeschlossen und der fertiggestellte Sprint ist unter dem Reiter "Milestones" vorzufinden.

SprintE.png

SprintF.png


Erstellung eines Wikis

Im Softwareprojekt müssen viele Daten dokumentiert (siehe Anforderungsanalyse und Entwurf sowie Dokumentation)  werden und unter anderem auch ein Projekttagebuch (siehe Projekttagebuch geführt werden. Dies wird in der Wiki-Funktion von GitLab umgesetzt. Diese Option ist in der Projektnavigationsleiste unter dem Reiter "Wiki" vorzufinden. 

Wiki1.png

Wiki2.png

Im GitLab-Wiki muss die erste Seite die sogenannte "Home"-Seite sein. Sonst wird das Wiki nicht korrekt erzeugt. Die Seite wird mit der "Create page"-Funktion erstellt.

Wiki3.png

Um weitere Seiten zu erstellen, wird in der "Page"-Hierachie das "+" unter Home ausgewählt. Nach Erstellung der neuen Seite, wird diese wieder mit der "Create page"-Funktion erstellt.

Wiki4.png

Wiki5.png


Zeiterfassung in GitLab

Im Rahmen des Softwareprojekts sollt ihr eure Arbeitszeit präzise festhalten. Dazu könnt ihr direkt auf angelegten Issues/Tasks/User Stories in dem Bereich Time tracking eure Arbeitszeit Aufgabenspezifisch eintragen. In dem Fenster könnt ihr eintragen wie viel Zeit ihr gearbeitet habt, an welchem Tag ihr gearbeitet habt, um nachträgliches verbuchen von Arbeitszeit zu ermöglichen, und eine kleine Zusammenfassung angeben. Sollte bereits Zeit erfasst worden sein, muss über das Plus (siehe Bild oben rechts im roten Rahmen) Zeit gebucht werden.1754139824426-497.png


GitLab Pipelines

Eine GitLab Pipeline ist eine in .gitlab-ci.yml definierte Abfolge von Jobs. Jobs können dabei beispielsweise die automatische Ausführung von Tests sein.

Pipeline im Basisprojekt v2

Die Pipeline im Basisprojekt ist auf zwei Stages mit jeweils einem Job aufgeteilt und wird im Folgenden Schritt für Schritt erklärt. Ihr dürft im Rahmen des Softwareprojekts, wenn nötig, die Pipeline um weitere Jobs oder Stages erweitern. Die bestehenden Jobs sollten allerdings (von Studierenden) nicht geändert werden.

In der .gitlab-ci.yml werden zunächst die Stages definiert. Eine Stage ist eine logische Gruppe von Jobs, die in einem bestimmten Abschnitt der Pipeline ausgeführt werden. Jobs in einer Stage werden parallel ausgeführt, es sei denn es wird eine Abhängigkeit in den Jobs definiert.
Wenn alle Jobs in einer Stage (erfolgreich) abgeschlossen sind, startet die nächste Stage. Schlägt ein Job fehl wird die gesamte Pipeline gestoppt, außer es werden Jobs so markiert, dass sie fehlschlagen dürfen.

stages:
  - verify
  - deploy

Der verify-job ist der erste Job, der in der Pipeline definiert ist. Er wird in der verify-Stage ausgeführt. Das Image ist ein Docker-Image, welches schon mit einer Java 21 Umgebung eingerichtet ist. Dadurch wird sichergestellt, dass der Job immer die gleiche Umgebung hat ("but it works on my machine").
Im Script-Abschnitt wird dann mvn clean verify ausgeführt. Maven verify baut das Projekt und führt die Tests im Projekt aus.
Die Rules definieren, wann ein Job ausgeführt wird und ob das Fehlschlagen des Jobs erlaubt ist. Regeln werden von oben nach unten ausgewertet. $CI_PIPELINE_SOURCE == "schedule" sagt dass der Job bei automatischen Aufrufen über einen zeitgesteuerten Start der Pipeline mit besonderen Einschränkungen ausgeführt werden soll. allow_failure erlaubt in dem Fall, dass bei automatischer Ausführung die Pipeline nicht abgebrochen wird, falls sich euer Projekt nicht bauen lässt, damit darauffolgende Jobs weiterhin ausgeführt werden.

verify-job:
 stage: verify
 image: eclipse-temurin:21-jdk-alpine
 script:
    - "./mvnw clean verify"
 rules:
    - if: $CI_PIPELINE_SOURCE == "schedule"
     when: always
     allow_failure: true
    - when: always
     allow_failure: false

 Der deploy_stats_pages Job ist der erste Job, der in der deploy-Stage ausgeführt wird. Der Job erfasst eure Projektarbeitsdaten (bspw. eure Stundenbuchungen) und veröffentlicht diese, nur für euch in GitLab sichtbar, in eurem Projekt.
Die Variablen sind Umgebungsvariablen, die zum Erfassen der Daten benötigt werden. Die TIME_FRAMES Variable ist auskommentiert und sollte durch euren projektverantwortlichen Betreuer:in (Tutor:in) angepasst werden. Durch die TIME_FRAMES Variable können die Einschätzungszeiträume sowie die "Soll-Zeit" pro Zeitraum gesetzt und für die Visualisierung verwendet werden.
Im Script-Bereich wird erst git installiert und dann die Projekete zur Erfassung und Visualisierung der Daten installiert.
Der Artifakt-Bereich definiert welche Dateien nach Ausführung des Jobs behalten werden. Der Public Ordner wird verwendet, um statische Websiten zu veröffentlichen. In diesem Fall die Visualisierung der erfassten Daten.
Im Gegensatz zum verify-job wird der deploy_stats_pages-Job nur ausgeführt, wenn die Pipeline zeitgesteuert gestartet wird. 

deploy_stats_pages:
 stage: deploy
 image: maven:3.9.9-amazoncorretto-21-al2023
 variables:
     DEVELOPMENT_BRANCH_NAME: "development"
     FETCH_MULTITHREAD: "true" #options are true/false
     LOGLEVEL: "SHORT" #options are OFF, SHORT, LONG. Has an effect on the amount of logging when data is being added
     #TIME_FRAMES: "01.01.2025,31.03.2025,40,Zeitraum01;01.04.2025,31.05.2025,35" #Format start,end,minHours[,name];anotherTimeframe;anotherTimeframe;...
 script:
    - yum install -y git rsync
    - git clone https://gitlab.swl.informatik.uni-oldenburg.de/GA/gitlab2data.git
    - cd gitlab2data
    - mvn clean package
    - java -jar target/GitLab2Data-1.0-SNAPSHOT-jar-with-dependencies.jar
    - cd ..
    - mkdir -p public/data
    - rm -f public/data/*.json
    - cp gitlab2data/*.json public/data/
    - git clone https://gitlab.swl.informatik.uni-oldenburg.de/GA/data4visual.git repo
    - rsync -av --exclude='data/' --exclude='.git' --exclude='.gitignore' repo/ public/
 artifacts:
   paths:
      - public
 pages:
   path_prefix: "stats" #to allow for parallel deployments of the projects own page don't make the stats site the main deployment
   expire_in: never
 rules:
    - if: $CI_PIPELINE_SOURCE == "schedule"
     when: always
    - when: never

GitLab Pages (Einsehen der erfassten Projektdaten)

 Wie im vorherigen Abschnitt beschrieben, werden im Softwareprojekt mit Hilfe der Pipeline Daten erfasst. Diese Daten können dann aus GitLab eingesehen werden, dazu kann man im Projekt über Deploy -> Pages und das Parallele Deployment "stats" die Daten einsehen.
Pages können im Projekt über Deploy -> Pages eingesehen werdenParallelDeploymentsStats.png

User Overview

Auf der Seite User overview wird eine kompakte Übersicht aller Projektmitglieder dargstellt. Nutzer:innen werden nicht dargestellt, solange keine Zeitbuchung getätigt wurde.
Useroverview.png

Timelogs

Unter Timelogs können einzelne Zeiteintragungen eingesehen werden. Dazu gibt es einige Filtermöglichkeiten, sowie die Möglichkeit nach Zeiträumen zu filtern. In Tabellenform lassen sich die Einträge einzelner Tage anklicken, um eine detailliertere Beschreibung einsehen zu können.

TimeLogs.png

Request (und Review) Overview

Auf der Seite Request Overview können alle im Projekt erstellten Merge Requests eingesehen werden. Unter dem Diagramm ist zusätzlich eine Tabelle zu sehen, die neben der Anzahl im Diagramm noch weitere Informationen wie bspw. Titel und Status beinhaltet. Die Daten lassen sich nach Zielbranch (interessant ist hier Development) und Nutzer:in (durch einen Klick im Tortendiagramm) filtern. Die Seite Review Overview ist vom Verhalten analog gestaltet.

RequestOverview.png

Code Contribution

Die Code Contribution Seite zeigt grafisch aufbereitete Informationen über die Menge an geschriebenem Code und die Zahl der Commits. Der Nutzer kann zwischen verschiedenen Diagrammtypen wählen (tägliche, monatliche oder Gesamtsummen für Code-nderungen bzw. Commits) und über Filter den dargestellten Zeitraum einschränken. Auch die Skalierung der Y-Achse kann angepasst werden.

Codecontribution.png

Target Time

Die Target Time Seite ermöglicht die Auswertung der Arbeitszeit im Vergleich zur erwarteten Mindestarbeitszeit über definierte Zeiträume hinweg. Die Zeiträume müssen für eine Verwendung der Seite vom Betreuer der Gruppe (Tutor) in der GitLab Pipeline als Variable gesetzt sein (siehe Abschnitt zur Pipeline im Basisprojekt2). Wenn alles gesetzt ist, dann kann über die Seite eingesehen werden, wie viel Zeit im Verhältnis der erwarteten Zeit, ins Projekt investiert wurde. Unter der roten Linie sollte keiner auf Dauer sein. 

TargetTime.png