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 환경을 만드는 단계예요.
- https://releases.hashicorp.com/vault-radar/ 에서 버전을 다운로드한다.
- 아래와 비슷한
./Dockerfile.pre-receive-env를 만든다: ``` FROM alpine:3.3 RUN apk add --update --no-cache git bashTARGETARCH and TARGETOS are set automatically when --platform is provided.
ARG TARGETOS ARG TARGETARCH COPY dist/linux/$TARGETARCH/vault-radar /bin/ ./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- 그런 다음
github-pre-receive.alpine.tar.gz를 GHES에 업로드한다. - 이후 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)
- pre-receive 훅 개요 — pre-receive 스캔의 전체 개념을 확인해요.
- Bitbucket pre-receive 훅 — Bitbucket Server에서 훅을 구성해요.
- GitLab pre-receive 훅 — GitLab에서 훅을 구성해요.
- CLI 시작하기 — 주요 명령어 목록을 둘러봐요.