파일 후크
커스텀 파일 후크를 사용하여 GitLab 소스 코드를 수정하지 않고도 커스텀 통합을 도입합니다.
파일 후크는 각 이벤트에서 실행됩니다. 파일 후크의 코드에서 이벤트나 프로젝트를 필터링할 수 있으며 필요한 만큼 여러 개의 파일 후크를 생성할 수 있습니다. 각 파일 후크는 이벤트가 발생했을 때 GitLab에 의해 비동기적으로 트리거됩니다. 이벤트 목록은 system hooks 및 webhooks 문서를 참조하세요.
자신의 파일 후크를 작성하고 지원하는 대신, GitLab 소스 코드를 직접 수정하고 업스트림에 기여할 수 있습니다. 이렇게 하면 기능이 버전 간에 유지되고 테스트로 커버됩니다.
커스텀 파일 후크 설정
파일 후크는 file_hooks
디렉토리에 있어야 합니다. 하위 디렉토리는 무시됩니다. 예제를 보려면 file_hooks
하의 example
디렉토리를 참고하세요.
커스텀 후크를 설정하려면:
-
GitLab 서버에서 플러그인 디렉토리를 찾습니다.
자가 컴파일 설치의 경우 경로는 일반적으로/home/git/gitlab/file_hooks/
입니다.
리눅스 패키지 설치의 경우 경로는 보통/opt/gitlab/embedded/service/gitlab-rails/file_hooks
입니다.다중 서버 구성의 경우, 후크 파일은 각 애플리케이션 서버에 존재해야 합니다.
-
file_hooks
디렉토리 내부에 공백이나 특수 문자가 없는 원하시는 이름의 파일을 생성합니다. -
후크 파일을 실행 가능하도록 설정하고 Git 사용자에게 소유권이 있는지 확인합니다.
-
파일 후크가 예상대로 기능하도록 코드를 작성합니다. 이는 어떤 언어로든 가능하며, 상단의 ‘shebang’이 언어 유형을 적절히 반영하는지 확인해야 합니다. 예를 들어, 스크립트가 Ruby로 작성된 경우 shebang은 아마도
#!/usr/bin/env ruby
일 것입니다. -
파일 후크에 대한 데이터는
STDIN
에서 JSON으로 제공됩니다. 이는 system hooks와 정확히 동일합니다.
파일 후크 코드가 적절히 구현되었다면, 후크는 적절할 때마다 실행됩니다. 각 이벤트에 대한 파일 후크 파일 목록이 업데이트됩니다. 새 파일 후크를 적용하기 위해 GitLab을 재시작할 필요는 없습니다.
파일 후크가 비정상 종료 코드로 실행되거나 GitLab이 이를 실행하지 못한 경우, 다음과 같이 로그에 메시지가 기록됩니다:
- 리눅스 패키지 설치 시
gitlab-rails/file_hook.log
. - 자가 컴파일 설치 시
log/file_hook.log
.
파일 후크 예제
이 예제는 project_create
이벤트에만 응답하며, GitLab 인스턴스는 관리자가 새로운 프로젝트가 생성되었다고 알립니다.
#!/opt/gitlab/embedded/bin/ruby
# By using the embedded ruby version we eliminate the possibility that our chosen language
# would be unavailable from
require 'json'
require 'mail'
# The incoming variables are in JSON format so we need to parse it first.
ARGS = JSON.parse($stdin.read)
# We only want to trigger this file hook on the event project_create
return unless ARGS['event_name'] == 'project_create'
# We will inform our admins of our gitlab instance that a new project is created
Mail.deliver do
from 'info@gitlab_instance.com'
to 'admin@gitlab_instance.com'
subject "new project " + ARGS['name']
body ARGS['owner_name'] + 'created project ' + ARGS['name']
end
검증 예제
자신만의 파일 훅을 작성하는 것은 까다로울 수 있으며 시스템을 변경하지 않고 확인할 수 있다면 더 쉽습니다. Rake 작업이 제공되어 스테이징 환경에서 파일 훅을 테스트하기 전에 사용할 수 있습니다. Rake 작업은 샘플 데이터를 사용하고 각 파일 훅을 실행합니다. 출력 결과는 시스템이 파일 훅을 인식하는지와 오류 없이 실행되었는지를 판단하는 데 충분해야 합니다.
# Omnibus 설치
sudo gitlab-rake file_hooks:validate
# 소스에서 설치
cd /home/git/gitlab
bundle exec rake file_hooks:validate RAILS_ENV=production
출력 예시:
/file_hooks 디렉토리에서 파일 훅 검증 중
* /home/git/gitlab/file_hooks/save_to_file.clj 성공 (영(exit) 코드 0)
* /home/git/gitlab/file_hooks/save_to_file.rb 실패 (비영(exit) 코드)