Skip to main content

pre-receiveフック環境の作成

pre-receiveフックを実行するには、デフォルトのpre-receive環境を使うか、カスタムの環境を作成します。

GitHub Enterprise Server の受信前環境は Linux chroot 環境です。 pre-receiveフックはプッシュのイベントごとに実行されるので、高速かつ軽量でなければなりません。 こうしたチェックに必要となる環境は、通常最小限のものです。

GitHub Enterprise Server には、次のパッケージを含む既定の環境が用意されています: awkbashcoreutilscurlfindgnupggrepjqsed

特定の言語のサポートなど、この環境が満たさない特定の要求があるなら、独自の 64 ビット Linux chroot 環境を作成してそれをアップロードできます。

pre-receive フック環境で使用される Git バージョンは少なくとも 2.11 である必要があります。または libgit2 を使用している場合は、バージョン 0.18 以降を使用する必要があります。 別の Git 実装を使用している場合は、info/alternates ファイル内の相対パスをサポートする必要があります。

Dockerを利用したpre-receiveフック環境の作成

pre-receiveフック環境の構築には、Linuxのコンテナ管理ツールが利用できます。 この例では、Debian LinuxDocker を使用します。

  1. ローカルに Docker がインストールされていることを確実にします

  2. 次の情報を含むファイル Dockerfile.debian を作成します。

    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

Debian イメージには既定でいくつかのシンボリックリンクが含まれており、これを削除しないとカスタム環境でスクリプトを実行するときにエラーが発生する可能性があります。 シンボリックリンクは、上記の例の最後の行で削除されます。

  1. Dockerfile.debian が格納されている作業ディレクトリから、イメージをビルドします。

    $ 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 
    
  2. コンテナを作成します:

    docker create --name pre-receive.debian pre-receive.debian /bin/true
    
  3. Docker コンテナーを gzip で圧縮された tar ファイルにエクスポートします。

    docker export pre-receive.debian | gzip > debian.tar.gz
    

    この debian.tar.gz ファイルは、GitHub Enterprise Server アプライアンスにアップロードする準備ができています。

chrootを使ったpre-receiveフック環境の作成

  1. Linux chroot 環境を作成します。

  2. chroot ディレクトリの gzip で圧縮された tar ファイルを作成します。

    cd /path/to/chroot
    tar -czf /path/to/pre-receive-environment.tar.gz .
    

    Note

    • tar アーカイブ内に、ファイルの先頭のディレクトリ パスは含めないでください (/path/to/chroot など)。
    • chroot 環境へのエントリ ポイントとして、/bin/sh が存在し、実行可能でなければなりません。
    • 旧来の chroot と異なり、chroot 環境では受信前フックのために dev ディレクトリを必要とすることはありません。

chroot 環境の作成の詳細については、Debian Wiki の「Chroot」または Ubuntu Community Help Wiki の「BasicChroot」を参照してください。

GitHub Enterprise Serverへのpre-receiveフック環境のアップロード

  1. の右上で、ご自分のプロフィール フォトをクリックしてから、 [Enterprise 設定] をクリックします。

    GitHub Enterprise Server でプロフィール写真をクリックすると表示されるドロップダウン メニューのスクリーンショット。 [Enterprise settings] オプションが枠線で囲まれています。

  2. ページの左側にある Enterprise アカウントのサイドバーで、 [設定] をクリックします。

  3. [ 設定] で、 [フック] をクリックします。

  4. [環境を管理する] をクリックします。

  5. [環境の追加] をクリックします。

  6. [環境名] フィールドに目的の名前を入力します。

  7. [URL から環境をアップロードする] フィールドに、環境を含む *.tar.gz ファイルの URL を入力します。

  8. [環境の追加] をクリックします。

管理シェル経由でのpre-receiveフック環境のアップロード

  1. ご利用の環境が含まれている読み出し可能な *.tar.gz ファイルを Web のホストにアップロードし、その URL をコピーするか、またはそのファイルを scp を介して GitHub Enterprise Server アプライアンスに転送してください。 scp を使用する場合には、*.tar.gz ファイルの権限を外界から読めるように調整することが必要な場合があります。

  2. 管理シェルに接続します。

  3. ghe-hook-env-create コマンドを使用して、最初の引数として環境に使用する名前を入力し、2 番目の引数として環境を含む *.tar.gz ファイルの完全なローカル パスまたは URL を入力します。

    admin@ghe-host:~$ ghe-hook-env-create DebianTestEnv /home/admin/debian.tar.gz
    > Pre-receive hook environment 'DebianTestEnv' (2) has been created.