Dieser Blogbeitrag beschreibt, wie Sie bestimmte GitLab-Repositories regelmäßig zu Ihrem GitHub-Konto oder Ihrer Organisation mit den CLI-Tools glab und gh spiegeln
Dieser Blogpost wurde von einer Maschine aus dem Englischen übersetzt. Die Originalversion finden Sie hier: Automatically mirror Gitlab repositories to Github
Bitte kontaktieren Sie uns , falls etwas unklar beschrieben ist, nicht funktioniert, falsch erscheint oder Sie Unterstützung benötigen.
Wir möchten einige unserer öffentlichen GitLab-Repositories für bessere Sichtbarkeit zu GitHub spiegeln. Es gibt eine GitLab-Funktion dafür unter Einstellungen -> Repository -> Repository-Spiegelung, die hier dokumentiert ist , aber leider gibt sie diesen Fehler bei Verwendung mit GitHub:
13: push to mirror: git push: exit status 128, stderr: “remote Support for password authentication was removed on August 13, 2021.\nremote: Please see https://docs.github.com/en/getting-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.\nfatal: Authentication failed for: ‘https://github.com/Blunix-GmbH/ansible-role-haproxy/’\n”.
Also lassen Sie uns das einfach per Skript lösen. Dies wird nicht automatisch ausgelöst, aber Sie können einen Cronjob auf Ihrem GitLab-Server einrichten, der dies einmal täglich ausführt.
GitLab hat ein CLI-Tool für die Administration
. Ein .deb-Paket kann für Ubuntu- und Debian-Linux-basierte Workstations auf der gitlab.com Download-Seite
heruntergeladen werden. Für die meisten Ubuntu- und Debian-basierten Server wählen Sie “glab_
wget https://gitlab.com/gitlab-org/cli/-/releases/v1.36.0/downloads/glab_1.36.0_Linux_x86_64.deb
sudo dpkg -i glab_1.36.0_Linux_x86_64.deb
Nach der Installation müssen Sie sich bei Ihrer GitLab-Instanz authentifizieren. Diese Konfiguration wird unter “~/.config/glab-cli/” gespeichert. Zur Authentifizierung benötigen Sie ein Token, das hier generiert werden kann:
https://your-gitlab-domain.com/-/user_settings/personal_access_tokens
Sie müssen nur die Berechtigung “api” und “read_repository” auswählen:
glab auth login
? What GitLab instance do you want to log into? GitLab Self-hosted Instance
? GitLab hostname: git.blunix.com
? API hostname: git.blunix.com
- Logging into git.blunix.com
? How would you like to login? Token
Tip: you can generate a Personal Access Token here https://git.blunix.com/-/profile/personal_access_tokens?scopes=api,write_repository
The minimum required scopes are 'api' and 'write_repository'.
? Paste your authentication token: **************************
? Choose default git protocol SSH
? Choose host API protocol HTTPS
- glab config set -h git.blunix.com git_protocol ssh
✓ Configured git protocol
- glab config set -h git.blunix.com api_protocol https
✓ Configured API protocol
Wenn wir es jetzt überprüfen, wird es nicht funktionieren:
glab repo list
Showing 0 of 0 projects (Page 1 of 1)
Aus welchem Grund auch immer ist die von “glab auth login” erstellte Konfiguration, die sich unter “~/.config/glab-cli/config.yml” befindet, standardmäßig so eingerichtet, dass sie nur mit gitlab.com spricht, nicht mit Ihrer persönlichen GitLab-Instanz. Lassen Sie uns das beheben, indem wir alle Vorkommen von gitlab.com durch den Hostnamen Ihres GitLab ersetzen:
# Ändern Sie dies zu Ihrer GitLab-Instanz
host: git.blunix.com
[...]
hosts:
# Ändern Sie dies auch
git.blunix.com:
[...]
# Und dies ebenfalls
api_host: git.blunix.com
[...]
Oder in einer Zeile:
sed -i 's/gitlab.com/git.blunix.com/g' ~/.config/glab-cli/config.yml
Jetzt sollten die Repositories sichtbar sein:
glab repo list
Showing 30 of 372 projects (Page 1 of 12)
ansible-roles/role-imgproxy git@git.blunix.com:ansible-roles/role-imgproxy.git Ansible role to install and configure imgproxy on Debian Linux
ansible-roles/role-golang git@git.blunix.com:ansible-roles/role-golang.git Ansible role to install and configure golang on Debian Linux
ansible-roles/role-systemd-journal-remote git@git.blunix.com:ansible-roles/role-systemd-journal-remote.git Ansible role to install and configure systemd-journal-remote on Debian Linux
[...]
Als Nächstes benötigen wir einen CLI-Client für GitHub, um automatisch Repositories dort zu erstellen. Es gibt eine GitHub-CLI namens “gh”, die einfach per apt installiert werden kann:
sudo apt install gh
Die Konfiguration ist sehr ähnlich zum glab-CLI-Tool (funktioniert aber sofort). In unserem Fall kann GitLab keinen Browser von der CLI starten, daher kopieren wir den Authentifizierungscode in die angezeigte URL:
gh auth login
? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations? HTTPS
? Authenticate Git with your GitHub credentials? Yes
? How would you like to authenticate GitHub CLI? Login with a web browser
! First copy your one-time code: D946-B977
Press Enter to open github.com in your browser...
2024/02/15 23:44:52.178314 cmd_run.go:1055: WARNING: cannot start document portal: Expected portal at "/run/user/1000/doc", got "/home/user/.cache/doc"
/user.slice/user-1000.slice/session-2.scope is not a snap cgroup
! Failed opening a web browser at https://github.com/login/device
exit status 4
Please try entering the URL in your browser manually
✓ Authentication complete.
- gh config set -h github.com git_protocol https
✓ Configured git protocol
✓ Logged in as blunix0815
Lassen Sie uns überprüfen, ob die Einrichtung erfolgreich war:
gh repo list
There are no repositories in @blunix0815
gh repo list Blunix-GmbH
Showing 30 of 47 repositories in @Blunix-GmbH
Blunix-GmbH/role-borgbackup-server Ansible role to install and configure borgbackup server on Debian Linux
[...]
Das folgende Skript verwendet die “glab”- und “gh”-CLI-Tools, um über alle Repositories auf der Blunix-GitLab-Instanz zu iterieren, das gleiche Projekt auf GitHub zu erstellen, das Projekt von GitLab zu klonen und den Master- oder Main-Branch zu GitHub zu pushen.
#!/bin/bash
#
# Repliziere alle Repositories von https://git.blunix.com/ansible-roles/ nach https://github.com/Blunix-GmbH/
# Liste alle Repos unter https://git.blunix.com/ansible-roles/ auf
# Beispielausgabe von glab repo list:
# ansible-roles/role-ssh git@git.blunix.com:ansible-roles/role-ssh.git Ansible role for managing OpenSSH-Server and users authorized_keys
glab repo list --all --group ansible-roles --per-page 1000 | while read line; do
# Überspringe "Showing of 51 projects (Page 1 of 1)"
[[ "$line" == Showing* ]] && continue
# Überspringe leere Zeilen
[[ "$line" == "" ]] && continue
# Extrahiere Repo-Namen
repo_name=$(echo $line | cut -d ' ' -f 1 | cut -d '/' -f 2)
# Extrahiere Repo-URL
repo_url=$(echo $line | cut -d ' ' -f 2)
# Extrahiere Beschreibung
repo_description=$(echo $line | cut -d ' ' -f 3-)
# Gib dem Benutzer einige Informationen über das aktuelle Repo
echo "Verarbeite Repo \"$repo_name\" mit URL \"$repo_url\""
# Breche bei leerer Beschreibung ab
if [[ "$repo_description" == "" ]]; then
echo "Beschreibung leer, Abbruch!"
exit 1
fi
# Erstelle Repo auf GitHub
gh repo create --disable-issues --disable-wiki --homepage https://www.blunix.com --public --description "$repo_description" Blunix-GmbH/$repo_name
# Klone Repo von GitLab
git clone $repo_url
# Pushe zu GitHub
cd $repo_name
git remote add github git@github.com:Blunix-GmbH/$repo_name
git push github master
cd ..
rm -rf $repo_name
done
Machen Sie es wie folgt ausführbar:
chmod 700 /usr/local/sbin/sync-repos-to-github.sh
Der folgende Befehl richtet einen Cronjob für das Skript ein, der täglich um 5 Uhr morgens ausgeführt wird:
(crontab -l 2>/dev/null; echo "0 5 * * * /usr/local/sbin/sync-repos-to-github.sh") | crontab
Suchen Sie
Linux Notfallunterstützung,
Linux-Beratung für Projekte,
Linux Managed Hosting,
Qubes OS Beratung und Support oder
Online- und Vor-Ort-Schulungen?