Eine Pre-Receive-Umgebung für GitHub Enterprise Server ist eine Linux-chroot
-Umgebung. Da Pre-Receive-Hooks bei jedem Push-Ereignis ausgeführt werden, sollten sie schnell und kompakt sein. Die für solche Überprüfungen benötigte Umgebung ist in der Regel minimal.
GitHub Enterprise Server stellt eine Standardumgebung bereit, die folgende Pakete enthält: awk
, bash
, coreutils
, curl
, find
, gnupg
, grep
, jq
, sed
.
Wenn eine bestimmte Anforderung vorliegt, die von dieser Umgebung nicht erfüllt wird, beispielsweise die Unterstützung einer bestimmten Sprache, kannst du deine eigene 64-Bit-Linux-chroot
-Umgebung erstellen und hochladen.
Bei der in der Pre-Receive-Hook-Umgebung verwendeten Git-Version muss es sich mindestens um die Version 2.11 handeln. Bei Verwendung von libgit2 müssen Sie mindestens Version 0.18 verwenden.
Bei Verwendung einer anderen Git-Implementierung muss sie relative Pfade in der Datei info/alternates
unterstützen.
Pre-Receive-Hook-Umgebung mit Docker erstellen
Du kannst ein Linux-Containerverwaltungstool zum Erstellen einer Pre-Receive-Hook-Umgebung verwenden. In diesem Beispiel werden Debian Linux und Docker verwendet.
-
Erstelle die Datei
Dockerfile.debian
, die diese Informationen enthält:FROM --platform=linux/amd64 debian:stable RUN apt-get update && apt-get install -y git bash curl RUN rm -fr /etc/localtime /usr/share/zoneinfo/localtime
Note
Das Debian-Image enthält standardmäßig einige Symlinks, die bei der Ausführung von Skripts in der benutzerdefinierten Umgebung Fehler verursachen können, wenn sie nicht entfernt werden. Symlinks werden in der letzten Zeile des obigen Beispiels entfernt.
-
Erstelle aus dem Arbeitsverzeichnis, das
Dockerfile.debian
enthält, ein Image:$ docker build -f Dockerfile.debian -t pre-receive.debian . > [+] Building 0.6s (6/6) FINISHED docker:desktop-linux > => [internal] load build definition from Dockerfile.debian > => [1/2] FROM docker.io/library/debian:latest@sha256:80dd3c3b9c6cecb9f1667e9290b3bc61b78c2678c02cbdae5f0fea92cc6 > => [2/2] RUN apt-get update && apt-get install -y git bash curl > => exporting to image > => => exporting layers > => => writing image sha256:b57af4e24082f3a30a34c0fe652a336444a3608f76833f5c5fdaf4d81d20c3cc > => => naming to docker.io/library/pre-receive.debian
-
Erstelle einen Container:
docker create --name pre-receive.debian pre-receive.debian /bin/true
-
Exportiere den Docker-Container in eine
gzip
-komprimiertetar
-Datei:docker export pre-receive.debian | gzip > debian.tar.gz
Diese Datei
debian.tar.gz
kann auf die GitHub Enterprise Server-Appliance hochgeladen werden.
Pre-Receive-Hook-Umgebung mit chroot erstellen
-
Erstelle eine Linux-
chroot
-Umgebung. -
Erstelle eine
gzip
-komprimiertetar
-Datei deschroot
-Verzeichnisses.cd /path/to/chroot tar -czf /path/to/pre-receive-environment.tar.gz .
Note
- Schließe keine führenden Verzeichnispfade von Dateien wie beispielsweise
/path/to/chroot
innerhalb des tar-Archivs ein. /bin/sh
muss existieren und als Einstiegspunkt in die chroot-Umgebung ausführbar sein.- Im Gegensatz zu herkömmlichen Chroots ist das
dev
-Verzeichnis in der chroot-Umgebung für Pre-Receive-Hooks nicht erforderlich.
- Schließe keine führenden Verzeichnispfade von Dateien wie beispielsweise
Weitere Informationen zum Erstellen einer chroot-Umgebung findest du unter Chroot im Debian Wiki oder BasicChroot im Ubuntu Community Help Wiki.
Pre-Receive-Hook-Umgebung auf GitHub Enterprise Server hochladen
-
Klicken Sie in der oberen rechten Ecke von GitHub Enterprise Server auf Ihr Profilfoto und dann auf Unternehmenseinstellungen.
-
Klicken Sie auf der linken Seite der Seite in der Randleiste des Enterprise-Kontos auf Einstellungen.
-
Wähle unter „ Einstellungen“ die Option Hooks aus.
-
Klicke auf Umgebungen verwalten.
-
Klicke auf Umgebung hinzufügen.
-
Gib den gewünschten Namen im Feld „Umgebungsname“ ein.
-
Gib im Feld „Umgebung von einer URL hochladen“ die URL der
*.tar.gz
-Datei ein, die deine Umgebung enthält. -
Klicke auf Umgebung hinzufügen.
Pre-Receive-Hook-Umgebung über die Verwaltungsshell hochladen
-
Lade eine lesbare
*.tar.gz
-Datei, die deine Umgebung enthält, auf einen Webhost hoch, und kopiere die URL, oder übertrage die Datei überscp
an die GitHub Enterprise Server-Appliance. Wenn duscp
verwendest, musst du die*.tar.gz
-Dateiberechtigungen möglicherweise anpassen, damit die Datei allgemein lesbar ist. -
Stelle eine Verbindung zur Verwaltungsshell her.
-
Führe den Befehl
ghe-hook-env-create
aus, und gib den gewünschten Namen für die Umgebung als erstes Argument und den vollständigen lokalen Pfad oder die URL einer*.tar.gz
-Datei, die deine Umgebung enthält, als zweites Argument ein.admin@ghe-host:~$ ghe-hook-env-create DebianTestEnv /home/admin/debian.tar.gz > Pre-receive hook environment 'DebianTestEnv' (2) has been created.