TL;DR: Geht nicht 🙂
Ausführliche Geschichte:
Der Sohn möchte gerne eine (statische) Website mit git versionieren, was ich natürlich unterstütze. Wir haben Gitlab, was liegt da näher als Gitlab Pages? Habe ich nicht hinbekommen, vielleicht, weil Gitlab bei mir hinter einem reversen Proxy (Apache) läuft.
Dann dachte ich, ich könne doch einen post-receive-hook verwenden, der nach erfolgreichem push das Repository in die DocumentRoot des Webservers pullt.
Nach ein paar Fallen (die größte: es muß alles als User git
laufen, also muß git
auch einen ssh-key haben und der muß beim Sohn im Gitlab bekannt sein) ging es. Änderungen ins gitlab pushen, und instantan sind sie auf der Website. Sehr schön!
Nun habe auch ich eine statische Seite, und wenn das mit git beim Sohn geht, so muß es auch beim Vater gehen!
Also nach demselben Schema vorgegangen — doch ach: ich kann den pubkey von git nicht zu meinem Account hinzufügen:
Der Key ist schon beim Sohn und kann deswegen nicht auch beim Vater sein (Sohn enterben?)
Großes Kino, und nun?
Der Hook, der beim Sohn funktioniert:
#!/bin/sh cd /zroot/webroot/com/sokoll/sohn git pull
Beim Vater funktioniert nicht:
#!/bin/sh cd /zroot/webroot/com/sokoll/vater git pull
Weil eben der pubkey nicht vorhanden ist und auch nicht bei Vater hochgeladen werden kann. Man müßte dem git pull sagen können, welcher key genommen werden soll, aber das geht nicht. Oder doch?
Doch, es geht, aber nicht direkt, sondern über /var/opt/gitlab/.ssh/config
.
# Sohn Host sohn.gitlab.sokoll.com HostName gitlab.sokoll.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa-sohn # Vater Host vater.gitlab.sokoll.com HostName gitlab.sokoll.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa-vater
Natürlich müssen dann die remotes geändert werden:
Sohn:
origin git@sohn.gitlab.sokoll.com:sohn/sohn-repo.git (fetch) origin git@sohn.gitlab.sokoll.com:sohn/sohn-repo.git (push)
Vater:
origin git@vater.gitlab.sokoll.com:vater/vater-repo.git (fetch) origin git@vater.gitlab.sokoll.com:vater/vater-repo.git (push)
Und schon nimmt git pro Repository einen anderen Key.
Und während ich das schreibe lerne ich, daß das alles Quatsch ist und daß man ja auch lokal clonen/pullen kann🤦♂️.
Vielleicht nützt es ja, wenn jemand mehrere Accounts auf einer Gitlab-Instanz hat. Keine Ahnung, wie das bei Github ist.