GitHub pre-receive 훅 설정하기

GitHub pre-receive 훅 설정하기

pre-receive 훅을 설정하고 구성하는 작업은 서버 구현과 밀접하게 연관돼 있어요. 그래서 더 자세한 내용은 GitHub 문서를 참조하는 것이 도움이 될 수 있어요. 아래는 GitHub Enterprise Server(GHES)에서 vault-radar를 사용해 pre-receive 훅을 설정하는 방법의 예시예요.

출처: 문서

본문

pre-receive 훅을 설정하고 구성하는 것은 서버 구현과 밀접하게 연관돼 있어요. 따라서 추가 정보는 GitHub 문서를 참조하는 것이 도움이 될 수 있어요. 다음은 GitHub Enterprise Server(GHES)에서 vault-radar를 사용해 pre-receive 훅을 설정하는 방법의 예시예요.

vault-radar 설치

vault-radar CLI는 훅이 실행될 GitHub 서버에 설치되거나 업로드되어야 해요. 이를 수행하는 몇 가지 방법이 있어요. 가장 쉬운 방법은 훅 스크립트가 저장된 같은 저장소에 바이너리를 포함시키는 것이에요.

또는 CLI를 chroot 환경에 설치할 수 있어요. 이렇게 하면 CLI가 chroot 환경의 일부가 되어 pre-receive 스크립트에서 전역 명령으로 사용할 수 있게 돼요.

저장소의 일부로 CLI 커밋하기

이 작업은 CLI 바이너리를 훅 저장소 자체에 넣어서 수행해요.

메모: CLI는 일반 파일로 업로드해야 하며 Git LFS 파일이 아니어야 해요. LFS 파일은 GHES에서 제대로 체크아웃되지 않아 훅이 실패할 거예요.

메모: git config http.postBuffer 157286400 옵션을 설정하면 큰 파일에 대한 버퍼 크기를 늘리는 데 도움이 될 수 있어요.

새 chroot 환경 만들기

전반적인 GHES 지침은 여기에서 확인할 수 있어요.

아래는 위 가이드를 기반으로 새 chroot 환경을 만드는 단계예요.

  1. https://releases.hashicorp.com/vault-radar/ 에서 버전을 다운로드한다.
  2. 아래와 비슷한 ./Dockerfile.pre-receive-env를 만든다: ``` FROM alpine:3.3 RUN apk add --update --no-cache git bash

    TARGETARCH and TARGETOS are set automatically when --platform is provided.

    ARG TARGETOS ARG TARGETARCH COPY dist/linux/$TARGETARCH/vault-radar /bin/
  3. ./Dockerfile.pre-receive-env를 기본 이미지로 사용하고 CLI를 추가한다: ``` $ docker build -f ./Dockerfile.pre-receive-env -t github-pre-receive.alpine --platform=linux/amd64 .
    $ docker create --name github-pre-receive.alpine github-pre-receive.alpine /bin/true
    $ docker export github-pre-receive.alpine | gzip > github-pre-receive.alpine.tar.gz
  4. 그런 다음 github-pre-receive.alpine.tar.gz를 GHES에 업로드한다.
  5. 이후 Settings > Pre-receive environments에서 새 GHES 훅 환경으로 가져올 수 있다.

훅 저장소(Hook repo)

GHES에서 pre-receive 훅은 Git 저장소에 저장돼요. 저장소는 다음 항목을 포함해야 해요:

  • 훅 스크립트 자체
  • vault-radar 라이선스
  • vault-radar 설정 파일
  • 선택적으로 CLI 바이너리

메모: 라이선스와 설정 파일은 CLI 자체처럼 훅 환경의 일부가 될 수 있어요. 하지만 저장소에 두는 것이 설정을 단순화해요.

예시 훅 스크립트

GitHub Enterprise Server 환경에서 사용되는 훅 스크립트의 예시는 다음과 같아요:

#!/bin/bash

git=$(which git)
export GIT=$git

# Get the directory of the script
# this is needed to properly pass the location of the license file and config file to vault-radar
script_dir=$(dirname "$(realpath "$0")")

# Set the HOME environment variable to the githook user's home directory
# on GHES hook env HOME var is not set
# without it vault-radar will fail  
export HOME=/home/githook

export VAULT_RADAR_LICENSE_PATH=$script_dir/vault-radar.hclic
export VAULT_RADAR_CONFIG_PATH=$script_dir/config.json

exec $script_dir/vault-radar scan git pre-receive

위 스크립트는 vault-radar 실행 파일, 라이선스, 설정을 저장소에서 사용해요.

더 알아보기 (Learn more)