Das Spiegeln eines Projekts
Auswahl der richtigen Methode
Es gibt drei verschiedene Methoden für das Spiegeln (auf Englisch: mirroring) eines Projekts:
- Push: Spiegelung eines Projekts von der openCode-GitLab-Instanz zu einem anderen Ort
- Pull: Spiegelung eines Projekts von einem anderen Ort zur openCode-GitLab-Instanz
- Bidirektional: Spiegeln in zwei Richtungen
Hinweis
Ein Pull- oder Bidirektionales-Spiegeln ist in der von openCode genutzten Version von GitLab leider nicht verfügbar.
Es gibt allerdings die Möglichkeit, über eine CI-Komponente auch eine Pull-Spiegelung umzusetzen. Die Anleitung für eine Pull-Spiegelung mittels CI-Komponente finden Sie hier auf dieser Seite. Diese Anleitung erfordert allerdings Vorwissen über CI-Scripts und Pipelines in GitLab.
Push-Spiegelung
Bei einer Push-Spiegelung wird das Ausgangsprojekt (von der openCode-GitLab-Instanz) zu einem Zielprojekt hochgeladen.
1. Kopieren der Ziel-URL für das Ausgangsprojekt
- Öffnen Sie (in einem neuen Browser-Tab) die Seite eines leeren Projekts, zu welchem Ihr Ausgangsprojekt gespiegelt werden soll.
-
Kopieren Sie die URL für den SSH-Zugriff auf das Zielprojekt, welches den gespiegelten Code beinhalten soll:
-
URL eines GitHub-Projekts:
- Öffnen Sie das GitHub-Projekt, welches Sie spiegeln wollen.
- Drücken Sie nun auf die grüne Code-Schaltfläche und wählen Sie den Reiter SSH aus.
- Kopieren Sie nun die entsprechende URL in die Zwischenablage:
-
URL eines GitLab-Projekts:
- Öffnen Sie das GitLab-Projekt, welches Sie spiegeln wollen.
- Drücken Sie nun auf die blaue Code-Schaltfläche.
- Kopieren Sie die URL unter "Mit SSH klonen" in die Zwischenablage
-
2. Hinzufügen einer Spiegelung zum Ausgangsprojekt
Hinweis
Um ein Projekt zu spiegeln, müssen Sie zunächst sicherstellen, dass Sie in dem zu spiegelnden Projekt mindestens über die Rechte einer/eines Betreuer(in) verfügen.
- Öffnen Sie das Projekt, welches Sie an anderer Stelle spiegeln wollen.
- Navigieren Sie nun in der linken Leiste zu: Einstellungen > Repository.
- Öffnen Sie anschließend den Reiter Spiegelnde Repositorys.
- Klicken Sie nun auf die Schaltfläche Hinzufügen.
Sie sollten nun folgende Einstellungen sehen:
Fahren Sie zum Ausfüllen dieser Einstellungen mit den nächsten Schritten fort:
- Fügen Sie die kopierte URL in das Feld Git-Repository-URL ein und nehmen Sie folgende Änderungen an dieser vor:
- Fügen Sie vor die URL ein
ssh://
hinzu. - Ersetzen Sie den Doppelpunkt (
:
) vor dem Namen des Projekts mit einem Schrägstrich (/
).
- Fügen Sie vor die URL ein
- Legen Sie nun als Authentifizierungsmethode die Methode Öffentlicher SSH-Schlüssel fest.
- Setzen Sie Ihren Nutzer:innen-Namen im Feld Nutzername auf
git
. - Bestätigen Sie Ihre Eingaben, indem Sie auf die (blaue) Schaltfläche Repository spiegeln klicken.
3. Zugriff auf das Zielprojekt mittels eines öffentlichen SSH-Schlüssels erlauben
3.1 Kopieren des öffentlichen SSH-Schlüssel des zu spiegelnden Projekts
- Laden Sie die Seite des GitLab-Projekts, welches Sie spiegeln wollen.
- Öffnen Sie Einstellungen > Repository.
- Öffnen Sie den Reiter Spiegelnde Repositorys.
- Sie sollten nun den zuvor angelegten Eintrag sehen. Drücken Sie in diesem Eintrag nun auf die Schaltfläche (🔃), um den öffentlichen Schlüssel zu kopieren:
3.2 Hinzufügen des Schlüssels zu dem Projekt, auf das Sie Ihr Projekt spiegeln wollen
Dieser Schritt unterscheidet sich je nach der Plattform, auf die Sie Ihr Projekt spiegeln wollen. Befolgen Sie nun die Schritte für Ihre jeweils ausgewählte Plattform:
- Einstellungen eines GitLab-Projekts:
- Öffnen Sie die Seite Ihres leeren GitLab-Projekts.
- Navigieren Sie zu Einstellungen > Repository.
- Öffnen Sie den Reiter Bereitstellungsschlüssel.
- Drücken Sie nun auf die Schaltfläche Neuen Schlüssel hinzufügen.
- Fügen Sie nun den Schlüssel aus der Zwischenablage hinein und wählen Sie einen aussagekräftigen Titel für Ihren Schlüssel.
- Sie haben nun erfolgreich einen neuen öffentlichen Schlüssel zum Projekt hinzugefügt!
- Einstellungen eines GitHub-Projekts:
- Öffnen Sie die Seite Ihres leeren GitHub-Projekts.
- Drücken Sie auf die Schaltfläche Settings (oben rechts).
- Navigieren Sie in der linken Seitenleiste zu Security > Deploy Keys.
- Drücken Sie nun auf die Schaltfläche Add deploy key.
- Fügen Sie nun den in der Zwischenablage befindlichen öffentlichen Schlüssel hinzu und geben Sie diesem Schlüssel einen aussagekräftigen Namen.
- Sie haben nun erfolgreich einen neuen öffentlichen Schlüssel dem Projekt hinzugefügt!
Info
Die Anleitung für eine Push-Spiegelung orientiert sich maßgeblich an der (englischsprachigen) Dokumentation von GitLab zum Repository mirroring.
Pull-Spiegelung
Bei einer Pull-Spiegelung wird ein Ausgangsprojekt von einem Zielprojekt (auf der openCode-GitLab-Instanz) heruntergeladen und regelmäßig aktualisiert. Dazu nutzen wir das CI/CD-System von der openCode-GitLab-Instanz, um regelmäßig Änderungen von einem Zielprojekt zu synchronisieren.
1. Anlegen des Ausgangsprojekts
- Legen Sie ein leeres Ausgangsprojekt auf der openCode-GitLab-Instanz an.
- Legen Sie in diesem Ausgangsprojekt einen neuen Branch an. In diesem Beispiel wird dieser Branch mit
pull-mirroring
bezeichnet. Sie können aber auch eine beliebige andere Bezeichnung wählen. Vermeiden Sie übliche Branch-Namen wiemain
odermaster
, da diese Bezeichnungen vermutlich im gespiegelten Projekt genutzt werden. -
Legen Sie nun auf dem neu erstellten Branch folgendes GitLab CI-Script (
.gitlab-ci.yml
) an:- Passen Sie dabei den Link des Zielprojekts (
target_url
) an.
Info
Dieses Skript bindet folgende CI/CD-Komponente ein.
.gitlab-ci.ymlinclude: - component: $CI_SERVER_FQDN/pull-mirroring/component/pull-mirroring@1.0.1 inputs: target_url: https://gitlab.opencode.de/ZIELPROJEKT # Link zum Zielprojekt, welches zum Ausgangsprojekt heruntergeladen werden soll; kann auch ein GitHub-Repo seinauch auf https://github.com/... sein # http_protocol: # (https) (access token only) Allows you to switch to `http` access_token_name: $GITLAB_PAT_NAME # (ci-mirroring) The name of the access token with the `write_repository` permission access_token: $GITLAB_PAT # (null) The access token value # ssh_user: # (git) The SSH username # ssh_key: # (null) The path to the base64 encoded SSH private key # ssh_key_public: # (null) The path to the base64 encoded SSH public key # stage: # (mirroring) The name of the stage for the job to be associated with # remote_name: # (upstream) The name of the remote added to fetch `target_url` updates git_push_opt: --force # ('') Options to pass to the `git push` command stages: - build - mirroring
- Passen Sie dabei den Link des Zielprojekts (
2. Zugriff auf Zielprojekt ermöglichen
Info
Anstatt den Zugriff über ein Zugriffstoken zu ermöglichen, können Sie auch einen Zugriff über einen SSH-Schlüssel einrichten. Hierzu müssen Sie auch die entsprechenden Optionen in der .gitlab-ci.yml
-Datei anpassen.
- Navigieren Sie auf der GitLab-Seite des Ausgangsprojekts zu Einstellungen > Access tokens.
- Erstellen Sie über die Schaltfläche Neuen Token hinzufügen einen neuen Zugriffstoken:
- Vergeben Sie einen aussagekräftigen Token-Namen und merken Sie sich diese exakte Bezeichnung (oder speichern Sie diese in einem Passwort-Manager).
- Wählen Sie die Rolle
Developer
aus. - Wählen Sie folgende Geltungsbereiche aus:
write_repository
,read repository
. - Bestätigen Sie die Erstellung eines neuen Projekt-Zugriffstokens über die (blaue) Schaltfläche "Projekt-Zugriffstoken erstellen".
- Kopieren Sie anschließend auf der Seite, die sich nun geöffnet hat, den neu erstellten Zugriffstoken über die Schaltfläche Projekt-Zugriffstoken kopieren in die Zwischenablage (oder speichern Sie diesen in einem Passwort-Manager):
- Fügen Sie den erstellten Zugriffstoken zu den CI/CD-Variablen hinzu:
- Navigieren Sie in der Navigationsleiste (auf der linken Seite) nun zu Einstellungen > CI/CD.
- Öffnen Sie den Reiter Variablen.
- Klicken Sie auf die Schaltfläche Variable hinzufügen.
- Geben Sie nun im Feld Schlüssel den Wert
GITLAB_PAT
an. - Fügen Sie in das Feld Wert den Zugriffstoken aus der Zwischenablage (oder dem Passwort-Manager) aus Schritt 3 hinzu (achten Sie darauf, dass am Ende des Codes keine neue leere Zeile hinzugefügt wird).
- Klicken Sie nun auf die Schaltfläche Variable hinzufügen
- Fügen Sie die Variable mit dem Schlüssel
GITLAB_PAT_NAME
und der Bezeichnung des Zugrifftokens aus Schritt 2 zu den CI/CD-Variablen hinzu.
3. Eine regelmäßige Synchronisierung einrichten
- Öffnen Sie auf der GitLab-Projektseite Build > Pipeline-Zeitpläne
- Klicken Sie auf die (blaue) Schaltfläche Erstelle einen neuen Pipeline-Zeitplan.
- Geben Sie eine aussagekräftige Beschreibung für den Pipeline-Zeitplan an.
- Wählen Sie ein Intervallmuster aus.
- Wählen Sie bei Zielbranch oder -Tag auswählen den Branch-Namen aus, der die Datei
.gitlab-ci.yml
enthält und in Schritt 2.1 angelegt wurde. In diesem Beispiel ist dies der Branchpull-mirroring
. - Erstellen Sie den neuen Pipeline-Zeitplan über die entsprechende (blaue) Schaltfläche.