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 bietet eine Standardumgebung. Diese enthält die folgenden Pakete: 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, können Sie Ihre eigene 64-Bit-Linux-chroot
-Umgebung erstellen und hochladen.
Pre-Receive-Hook-Umgebung mit Docker erstellen
Sie können ein Linux-Containerverwaltungstool zum Erstellen einer Pre-Receive-Hook-Umgebung verwenden. In diesem Beispiel werden Alpine Linux und Docker verwendet.
-
Erstellen Sie die Datei
Dockerfile.alpine-3.3
, welche die folgenden Informationen enthält:
```
FROM gliderlabs/alpine:3.3
RUN apk add --no-cache git bash
```
- Erstellen Sie im Verzeichnis, in dem die
Dockerfile.alpine-3.3
enthalten ist, ein Image:
$ docker build -f Dockerfile.alpine-3.3 -t pre-receive.alpine-3.3 .
> Sending build context to Docker daemon 12.29 kB
> Step 1 : FROM gliderlabs/alpine:3.3
> ---> 8944964f99f4
> Step 2 : RUN apk add --no-cache git bash
> ---> Using cache
> ---> 0250ab3be9c5
> Successfully built 0250ab3be9c5
- Erstellen Sie einen Container:
$ docker create --name pre-receive.alpine-3.3 pre-receive.alpine-3.3 /bin/true
- Exportieren Sie den Docker-Container in eine
gzip
-komprimierteTAR
-Datei:
$ docker export pre-receive.alpine-3.3 | gzip > alpine-3.3.tar.gz
Diese Datei alpine-3.3.tar.gz
kann auf die Appliance GitHub Enterprise Server hochgeladen werden.
Pre-Receive-Hook-Umgebung mit chroot erstellen
- Erstellen Sie eine Linux-
chroot
-Umgebung. - Erstellen Sie eine
gzip
-komprimierteTAR
-Datei des Verzeichnisseschroot
.$ cd /path/to/chroot $ tar -czf /path/to/pre-receive-environment.tar.gz .
Hinweise:
- Schließe keine führenden Verzeichnispfade von Dateien innerhalb des tar-Archivs ein, wie beispielsweise `/path/to/chroot`.
- `/bin/sh` muss existieren und als Einstiegspunkt in die chroot-Umgebung ausführbar sein.
- Im Gegensatz zu herkömmlichen Chroots ist das Verzeichnis `dev` für Vorempfang-Hooks nicht erforderlich.
Weitere Informationen zum Erstellen einer chroot-Umgebung finden Sie unter „Chroot“ aus dem Debian-Wiki, „BasicChroot“ aus dem Hilfe-Wiki der Ubuntu-Community oder „Installing Alpine Linux in a chroot (Alpine Linux in einem chroot installieren“ aus dem Alpine Linux-Wiki.
Pre-Receive-Hook-Umgebung auf GitHub Enterprise Server hochladen
- Klicke in der oberen rechten Ecke einer beliebigen Seite auf .
- Klicken Sie auf der linken Seitenleiste auf Enterprise.
- Klicke in der Seitenleiste des Enterprise-Kontos auf Settings (Einstellungen).
-
Klicken Sie unter „Settings“ (Einstellungen) auf Hooks.
-
Klicken Sie auf Manage environments (Umgebungen verwalten).
-
Klicken Sie auf Add environment (Umgebung hinzufügen).
-
Geben Sie den gewünschten Namen in das Feld Environment name (Name der Umgebung) ein.
-
Geben Sie die URL der
*.tar.gz
-Datei ein, in der Ihre Umgebung enthalten ist. -
Klicken Sie auf Add environment (Umgebung hinzufügen).
Pre-Receive-Hook-Umgebung über die Verwaltungsshell hochladen
- Laden Sie eine lesbare
*.tar.gz
-Datei, die Ihre Umgebung enthält, auf einen Webhost hoch, und kopieren Sie die URL, oder übertragen Sie die Datei überscp
an die GitHub Enterprise Server-Appliance. Wenn Siescp
verwenden, müssen Sie die*.tar.gz
-Dateiberechtigungen ggf. anpassen, damit die Datei allgemein lesbar ist. - Stellen Sie eine Verbindung zur Verwaltungsshell her.
- Führen Sie den Befehl
ghe-hook-env-create
aus, und geben Sie den gewünschten Namen für die Umgebung als das erste Argument und den vollständigen lokalen Pfad oder die URL einer*.tar.gz
-Datei, die Ihre Umgebung enthält, als das zweite Argument ein.
admin@ghe-host:~$ ghe-hook-env-create AlpineTestEnv /home/admin/alpine-3.3.tar.gz
> Pre-receive hook environment 'AlpineTestEnv' (2) has been created.