Creating a pre-receive hook environment
To execute pre-receive hooks, use either the default pre-receive environment, or create a custom environment.
A pre-receive environment for GitHub Enterprise Server is a Linux
chroot environment. Because pre-receive hooks execute on every push event, they should be fast and lightweight. The environment needed for such checks will typically be minimal.
GitHub Enterprise Server provides a default environment which includes these packages:
If you have a specific requirement that isn't met by this environment, such as support for a particular language, you can create and upload your own 64-bit Linux
In this guide
- Creating a pre-receive hook environment using Docker
- Creating a pre-receive hook environment using chroot
- Uploading a pre-receive hook environment via the admin center
- Uploading a pre-receive hook environment via the administrative shell
Creating a pre-receive hook environment using Docker
You can use a Linux container management tool to build a pre-receive hook environment. This example uses Alpine Linux and Docker.
Ensure Docker is installed locally.
Create the file
Dockerfile.alpine-3.3that contains this information:
FROM gliderlabs/alpine:3.3 RUN apk add --no-cache git bash
From the working directory that contains
Dockerfile.alpine-3.3, build an 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
Create a container:
$ docker create --name pre-receive.alpine-3.3 pre-receive.alpine-3.3 /bin/true
Export the Docker container to a
$ docker export pre-receive.alpine-3.3 | gzip > alpine-3.3.tar.gz
alpine-3.3.tar.gzis ready to be uploaded to the GitHub Enterprise Server appliance.
Creating a pre-receive hook environment using chroot
Create a Linux
tarfile of the
$ tar -czf pre-receive-environment.tar.gz /path/to/chroot
For more information about creating a chroot environment see "Chroot" from the Debian Wiki, "BasicChroot" from the Ubuntu Community Help Wiki, or "Installing Alpine Linux in a chroot" from the Alpine Linux Wiki.
Uploading a pre-receive hook environment via the admin center
- In the upper-right corner of any page, click .
In the left sidebar, click Business.
Under your business account's name, click Settings.
In the left sidebar, click Hooks.
- Click Manage environments.
- Click Add environment.
- Enter the desired name in the Environment name field.
- Enter the URL of the
*.tar.gzfile that contains your environment.
- Click Add environment.
Uploading a pre-receive hook environment via the administrative shell
Upload a readable
*.tar.gzfile that contains your environment to a web host and copy the URL or transfer the file to the GitHub Enterprise Server appliance via
scp. When using
scp, you may need to adjust the
*.tar.gzfile permissions so that the file is world readable.
Connect to the administrative shell.
ghe-hook-env-createcommand and type the name you want for the environment as the first argument and the full local path or URL of a
*.tar.gzfile that contains your environment as the second argument.
admin@ghe-host:~$ ghe-hook-env-create AlpineTestEnv /home/admin/alpine-3.3.tar.gz > Pre-receive hook environment 'AlpineTestEnv' (2) has been created.