Projekte spiegeln
Sie möchten ein bestehendes Projekt von einer anderen Plattform wie GitHub übernehmen oder ein Projekt von der openCode-GitLab-Instanz auf eine andere Plattform (z. B. GitHub, Gitea) übertragen? Dies wird als Spiegelung (auf Englisch mirroring) bezeichnet. Hierfür gibt es drei Methoden:
| Methode | Beschreibung |
|---|---|
| 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 |
So funktioniert die Push-Spiegelung
Beim Spiegeln wird ein Projekt von der openCode-GitLab-Instanz auf eine andere Plattform (z. B. GitHub, Gitea) übertragen. Voraussetzung dafür sind Betreuer:innen-Rechte für das Projekt auf openCode. Das Zielprojekt (z. B. auf GitHub) sollte bereits existieren. Beim Push-Mirroring sendet die Quelle (openCode-GitLab-Instanz) aktiv Änderungen an das Ziel (GitHub, Gitea, etc.).
1. Ziel-URL kopieren
Öffnen Sie das Zielprojekt (z. B. auf GitHub oder GitLab) und klicken Sie auf die "Code"-Schaltfläche (in GitLab ist diese blau, in GitHub ist sie grün). In GitHub wählen Sie den SSH-Reiter und kopieren die dort angezeigte URL. In GitLab wählen Sie "Mit SSH klonen", um die URL zu kopieren.
URL von GitHub kopieren:

URL von GitLab kopieren:

2. Spiegelung einrichten
Gehen Sie in Ihrem openCode-Projekt zu Einstellungen > Repository. Scrollen Sie zu "Spiegelnde Repositorys" und klicken Sie auf "Hinzufügen". Fügen Sie die eben kopierte URL ein und passen Sie diese wiefolgt an:

- Fügen Sie vor die URL ein ssh:// hinzu und ersetzen Sie den Doppelpunkt (:) vor dem Namen des Projekts mit einem Schrägstrich (/).
- Wählen Sie als Authentifizierungsmethode "Öffentlicher SSH-Schlüssel"
- Setzen Sie den Nutzernamen auf "git"
- Klicken Sie auf "Repository spiegeln"
3. SSH-Schlüssel hinzufügen
Kopieren Sie den angezeigten öffentlichen SSH-Schlüssel und fügen Sie ihn im Zielprojekt als "Deploy Key" ein.
Auf GitLab öffnen Sie dazu die Seite Ihres leeren GitLab-Projekts und navigieren zu Einstellungen > Repository. Öffnen Sie den Reiter Bereitstellungsschlüssel und klicken Sie 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.

Auf GitHub öffnen Sie die Seite Ihres leeren GitHub-Projekts. Klicken Sie oben rechts auf die Schaltfläche Settings und navigieren Sie in der linken Seitenleiste zu Security > Deploy Keys. Bestätigen Sie Add deploy key und fügen Sie den Schlüssel aus der Zwischenablage ein und vergeben auch hier einen aussagekräftigen Namen.

So funktioniert die Pull-Spiegelung
Das openCode-GitLab erlaubt aktuell keine automatische Pull-Spiegelung (Spiegelung eines Projekts von einem anderen Ort zur openCode-GitLab-Instanz) über die Oberfläche. Beim Pull-Mirroring initiiert das Ziel die Synchronisation. Es fragt die Quelle regelmäßig nach Änderungen ab.
Es gibt allerdings eine Alternative: Eine Umsetzung über CI/CD-Pipelines ist möglich, erfordert jedoch fortgeschrittene Kenntnisse. Das Ziel (die openCode-GitLab-Instanz) startet eine Pipeline. Diese Pipeline lädt die Daten von der Quelle (z. B. GitHub, Gitea usw.) auf eine temporäre Umgebung. Von dort werden Sie zurück ins Ziel-Repository gepusht.
In dieser Anleitung werden die zu synchronisierenden Projekte wie folgend bezeichnet:
- Ausgangsprojekt: Das Git-Projekt aus dem die Updates gezogen werden sollen, z.B. auf Github
- Zielprojekt: Das Git-Projekt auf openCode, auf das die Updates eingespielt werden sollen. Hier wird auch die CI/CD Konfiguration eingestellt über die Datei
.gitlab-c.yml.
1. Zielprojekt anlegen
Legen Sie ein leeres Zielprojekt auf der openCode-GitLab-Instanz an. Legen Sie in diesem einen neuen Branch an. Falls das Projekt bereits vorher importiert wurde (z.B. von Github), nutzen Sie dieses Repository mit einem neuen Branch.
Legen Sie nun auf dem neu erstellen Branch folgendes GitLab CI-Script (.gitlab-ci.yml) an. Passen Sie dabei den Link des Zielprojekts unter dem Punkt #Clone only main from GitHub an mit der URL des Ausgangsprojekts:
Das Ziel-Projekt, welches geklont werden soll können Sie mit der Variable TARGET_REPO anpassen.
2. Zugriff auf das Ausgangsprojekt ermöglichen
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
Developeraus. - 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 anschieß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 diese 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_PATan. - 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 und wählen Sie ein Intervallmuster aus. Erstellen Sie den neuen Pipeline-Zeitplan über die entsprechende (blaue) Schaltfläche
4. Überprüfung, dass die CI/CD erfolgreich ist
Öffnen Sie im Zielprojekt den Reiter Build > Pipeline. Dort sind die Ergebnisse der Pipeline einsehbar. Klicken Sie auf die Pipeline um zu sehen, ob die Synchronisation erfolgreich war.