Inhaltsverzeichnis

Gitlab CentOS 7 - API (curl)

Gitlab ist ein, in der Community Edition unter einer MIT-Lizenz zur Verfügung gestelltes System, zur Verwaltung von Git-Repositorys im Browser, was den unentgeltlichen Betrieb auf einem eigenen Server ermöglicht.

Nachfolgend soll beschrieben werden, wie ein Zugriff auf die GitLab API mittels einer *NIX - shell (hier bash) unter Nutzung des Befehls curl durchgeführt werden kann. (Inklusive Authentifizierung gegen einen bestehenden .htaccess-Schutz)

Gitlab gibt es ebenfalls in einer kostenpflichtigen Enterprise Edition

Ab hier werden root-Rechte zur Ausführung der nachfolgenden Befehle benötigt. Um der Benutzer root zu werden, geben Sie bitte nachfolgenden Befehl ein:

$ su -
Password: 

Voraussetzungen

Als Voraussetzung für die hier, nachfolgend dargestellte Installation von Gitlab sind folgende Komponenten erforderlich:

Nachfolgende rpm-Pakete sind als Abhängigkeit erforderlich und werden ebenfalls benötigt:

Vorbereitung

Um Zugriff auf die GitLab API mittels einer *NIX - shell (hier bash) unter Nutzung des Befehls curl zu erlangen sin zusätzlich zu den genannten Voraussetzungen auch die

durch den Benutzer in dessen User Settings | Access Tokens (Benutzereinstellungen | Zugriff „Token“) erforderlich.

Access Tokens: erstellen

Nachfolgende Beschreibung zeigt, wie ein Access Token über die Gitlab-Web-Oberfläche erstellt werden kann.

Schritt 1

Nach erfolgreicher Anmeldung, muss im oberen Menü das Symbol für den Benutzer ausgewählt werden und dort der Menüpunkt [Settings] (Einstellungen) ebenfalls ausgewählt werden, wie nachfolgende Bildschirmkopie zeigt:

Gitlab - User - Settings

Schritt 2

Anschließend wird im linken Bildschirmbereich der Menüpunkt [Access Tokens] ausgewählt, wie nachfolgende Bildschirmkopie zeigt:

Gitlab - User - Settings - Access Tokens

Schritt 3

Hier muss nun ein Name für den Access Token vergeben werden und der Zugriff auf die api erlaubt werden, bevor die Schaltfläche [Create personal access token] ausgewählt wird, wie ebenfalls nachfolgende Bildschirmkopie zeigt:

Gitlab - User - Settings - Access Tokens - Create personal access token

Feld Standard Wert Neuer Wert Beschreibung
Name API Token Name des Access Token
Scopes api api ✔ Zugriff auf die api gestatten

Schritt 4

Nachdem der Access Token erfolgreich erstellt wurde, kann dieser in die Zwischenablage des Betriebssystems kopiert werden, wie nachfolgende Bildschirmkopie zeigt:

Gitlab - User - Settings - Access Tokens - Create personal access token - Created

:!: WICHTIG - Bitte den Access Token sicher speichern, da dieser NICHT mehr in der Gitlab-Web-Oberfläche ersichtlich ist !!!

:!: HINWEIS - Falls der Access Token vergessen wurde, kann der „vergessene“ gelöscht und ein neuer erstellt werden.

Access Token
j9rnycMbMSCyjKddBq8C

Schritt 5

Anschließend ist der Access Token nutzbar - aber über die Gitlab-Web-Oberfläche nicht mehr ersichtlich, wie nachfolgende Bildschirmkopie zeigt:

Gitlab - User - Settings - Access Tokens - Create personal access token - Created - Overview

API: Abfragen

Nachfolgende Beispiele zeigen den Aufbau für den Befehl curl und wie dieser dazu verwendet werden kann, Abfragen gegen die GitLab API durchzuführen.

Nachfolgende Erklärungen beschreiben den Aufbau des curl-Befehls-Syntax anhand dem nachfolgendem Beispiel:

# curl -s -u "user" --header "PRIVATE-TOKEN: j9rnycMbMSCyjKddBq8C" "https://serverC8.tachtler.net/api/v4/version" | python -mjson.tool
Enter host password for user 'user':

Erzeugt die Ausgabe der aktuellen Version von Gitlab:

{
    "revision": "c90ae59",
    "version": "11.5.1"
}

Nachfolgend der Befehlsaufbau:

Befehl/Paramater Beschreibung
curl Der Befehl curl selbst
-s Silent - Unterdrückt jegliche Ausgaben die vom Befehl curl selbst sind
-u ”[username]” User - (Benutzername) aus Gitlab
−−header ”[token]” Access Token-Angabe für den Zugriff auf Gitlab
[URL] URL mit Angabe der Informationen, welche ermittelt werden sollen
| Umleiten der Ausgabe in eine pipe (Kanal/Rohr) zu dem nachfolgendem Befehl
python −mjson.tool Python-Befehlsaufruf zur JSON Formatierten Ausgabe

:!: HINWEIS - Der Paramater -u [username] muss nur angegeben werden, wenn ein .htaccess-Schutz besteht!

:!: HINWEIS - Eine Passwortabfrage erfolgt nur, wenn der Paramerter -u [username] angegeben wurde!

:!: HINWEIS - Die Passwortabfrage bezieht sich nur auf die .htaccess-Abfrage, falls vorhanden!

:!: HINWEIS - Der Benutzer -u [username] aus der .htaccess-Abfrage kann vom Gitlab-Benutzer differieren!

:!: HINWEIS - Der Gitlab-Benutzer wird nur durch den Access Token identifiziert!

Eine Liste der Möglichen Abfragen, kann unter nachfolgendem externen Link eingesehen werden:

*¹ Project API

:!: HINWEIS - Ausserhalb der alphabetischen Reihenfolge, da dies ein Bestandteil für nachfolgende Befehle ist!

Nachfolgende Erklärungen beschreiben den Aufbau des curl-Befehls-Syntax zur Ermittlung aller Projekte aus Gitlab:

# curl -s -u "user" --header "PRIVATE-TOKEN: j9rnycMbMSCyjKddBq8C" "https://serverC8.tachtler.net/api/v4/projects/" | python -mjson.tool | grep -e \"id\" -e \"web_url\"
Enter host password for user 'user':

Erzeugt die Ausgabe der aktuellen Projekte von Gitlab:

        "id": 8,
            "id": 2,
            "id": 2,
            "web_url": "https://serverC8.tachtler.net/gitlabuser"
        "web_url": "https://serverC8.tachtler.net/gitlabuser/jmilter-footermilter",

Nachfolgend der Befehlsaufbau:

Befehl/Paramater Beschreibung
curl Der Befehl curl selbst
-s Silent - Unterdrückt jegliche Ausgaben die vom Befehl curl selbst sind
-u ”[username]” User - (Benutzername) aus Gitlab
−−header ”[token]” Access Token-Angabe für den Zugriff auf Gitlab
[URL] URL mit Angabe der Informationen, welche ermittelt werden sollen
| Umleiten der Ausgabe in eine pipe (Kanal/Rohr) zu dem nachfolgendem Befehl
python −mjson.tool Python-Befehlsaufruf zur JSON Formatierten Ausgabe
| Umleiten der Ausgabe in eine pipe (Kanal/Rohr) zu dem nachfolgendem Befehl
grep -e \”id\” -e \”web_url\” Filter der Ausgabe nach ”id” und ”web_url”

:!: HINWEIS - Die Projekt-ID ist immer die am weitesten links stehende, hier: ”id”: 8, !

:!: HINWEIS - Weiter eingerückte ID's sind die des „Parent“, hier: ”id”: 2, !

Pipelines API

Nachfolgende Abfragen gegen die API beziehen sich auf den CI / CD Runner und dessen

:!: HINWEIS - Zur Ermittlung der Projekt-ID - siehe nachfolgenden internen Link:

Nachfolgende Möglichkeiten der Informationsbeschaffung können durchgeführt werden:

Auflistung der Projektpipelines

Nachfolgende Erklärungen beschreiben den Aufbau des curl-Befehls-Syntax zur Auflistung aller Projektpipelines, eines bestimmten Projekts mit der entsprechenden Projekt-ID aus Gitlab:

# curl -s -u "user" --header "PRIVATE-TOKEN: j9rnycMbMSCyjKddBq8C" "https://serverC8.tachtler.net/api/v4/projects/8/pipelines" | python -mjson.tool
Enter host password for user 'user':

Erzeugt die Ausgabe der aktuellen Pipelines des Projekts 8 von Gitlab:

[
    {
        "id": 100,
        "ref": "development",
        "sha": "773b0e8bfb601567d38c9bda72e2b6fc9f614504",
        "status": "success",
        "web_url": "https://serverC8.tachtler.net/gitlabuser/jmilter-footermilter/pipelines/100"
    },
    {
        "id": 99,
        "ref": "development",
        "sha": "2f16427b80aac4bb9afca89734243ab255762c9e",
        "status": "success",
        "web_url": "https://serverC8.tachtler.net/gitlabuser/jmilter-footermilter/pipelines/99"
    },
    {
        "id": 98,
        "ref": "master",
        "sha": "477470a96c79e521a8cbd8f7282e73c2b15ea5e4",
        "status": "success",
        "web_url": "https://serverC8.tachtler.net/gitlabuser/jmilter-footermilter/pipelines/98"
    },
    {
        "id": 97,
        "ref": "development",
        "sha": "0facb923e1d665d0b9b3604502b34cb765ef2232",
        "status": "success",
        "web_url": "https://serverC8.tachtler.net/gitlabuser/jmilter-footermilter/pipelines/97"
    },
    {
        "id": 96,
        "ref": "development",
        "sha": "d5cd8f2a7c125d23adb6f5bfd2a07b78c73d67d3",
        "status": "success",
        "web_url": "https://serverC8.tachtler.net/gitlabuser/jmilter-footermilter/pipelines/96"
    },
    {
        "id": 95,
        "ref": "development",
        "sha": "abc956e74618f26d76cdd87a4a226afd944103cc",
        "status": "failed",
        "web_url": "https://serverC8.tachtler.net/gitlabuser/jmilter-footermilter/pipelines/95"
    },
    {
        "id": 94,
        "ref": "development",
        "sha": "e1b86374e5f04eb8ffa647295854d94e3bcaa013",
        "status": "failed",
        "web_url": "https://serverC8.tachtler.net/gitlabuser/jmilter-footermilter/pipelines/94"
    }
]

Eine einzelne Pipeline abfragen

Nachfolgende Erklärungen beschreiben den Aufbau des curl-Befehls-Syntax zur Auflistung einer Projektpipelines, eines bestimmten Projekts mit der entsprechenden Projekt-ID aus Gitlab:

# curl -s -u "user" --header "PRIVATE-TOKEN: j9rnycMbMSCyjKddBq8C" "https://serverC8.tachtler.net/api/v4/projects/8/pipelines/100" | python -mjson.tool
Enter host password for user 'user':

Erzeugt die Ausgabe einer Pipelines des Projekts 8 von Gitlab:

{
    "before_sha": "2f27427b80aac4bb9afca88734243bd25576229e",
    "committed_at": null,
    "coverage": null,
    "created_at": "2018-12-08T06:54:36.800Z",
    "duration": 8,
    "finished_at": "2018-12-08T06:54:48.963Z",
    "id": 100,
    "ref": "development",
    "sha": "772b0e8bfb601467d38c9cda72e2b6fc7f614504",
    "started_at": "2018-12-08T06:54:38.748Z",
    "status": "success",
    "tag": false,
    "updated_at": "2018-12-08T06:54:48.978Z",
    "user": {
        "avatar_url": null,
        "id": 2,
        "name": "Klaus Tachtler",
        "state": "active",
        "username": "gitlabuser",
        "web_url": "https://serverC8.tachtler.net/klaus"
    },
    "web_url": "https://serverC8.tachtler.net/gitlabuser/jmilter-footermilter/pipelines/100",
    "yaml_errors": null
}

Eine Pipeline löschen

:!: HINWEIS - Erst ab Gitlab Version 11.6.x verfügbar!

Nachfolgende Erklärungen beschreiben den Aufbau des curl-Befehls-Syntax zur Löschung einer Projektpipelines, eines bestimmten Projekts mit der entsprechenden Projekt-ID aus Gitlab:

# curl -s -u "user" --header "PRIVATE-TOKEN: j9rnycMbMSCyjKddBq8C" --request "DELETE" "https://serverC8.tachtler.net/api/v4/projects/8/pipelines/100" | python -mjson.tool
Enter host password for user 'user':

Erzeugt die Ausgabe zur Löschung einer Pipelines des Projekts 8 von Gitlab:

 

Nachbereitung

Nachdem alle GitLab API-Abfragen durchgeführt worden sind, kann der Access Token mit nachfolgendem Vorgehen widerrufen werden.

Access Token: widerrufen

Nachfolgende Beschreibung zeigt, wie ein Access Token über die Gitlab-Web-Oberfläche widerrufen werden kann.

Schritt 1

Nach erfolgreicher Anmeldung, muss im oberen Menü das Symbol für den Benutzer ausgewählt werden und dort der Menüpunkt [Settings] (Einstellungen) ebenfalls ausgewählt werden, wie nachfolgende Bildschirmkopie zeigt:

Gitlab - User - Settings

Schritt 2

Anschließend wird im linken Bildschirmbereich der Menüpunkt [Access Tokens] ausgewählt, wie nachfolgende Bildschirmkopie zeigt:

Gitlab - User - Settings - Access Tokens

Schritt 3

Anschließend kann der Access Token in der Auflistung aller Access Token widerrufen werden, indem die Schaltfläche [Revoke], wie nachfolgende Bildschirmkopie zeigt:

Gitlab - User - Settings - Access Tokens - Create personal access token - Overview

Schritt 4

Nachdem der Access Token widerrufen wurde, wird dies mit nachfolgender Anzeige bestätigt:

Gitlab - User - Settings - Access Tokens - Create personal access token - revoked