파일 훅
사용자 지정 파일 훅(서버 훅 또는 시스템 훅과 혼동해서는 안 됨)을 사용하여 GitLab 소스 코드를 수정하지 않고 사용자 정의 통합을 소개할 수 있습니다.
파일 훅은 각 이벤트마다 실행됩니다. 훅의 코드에서 이벤트나 프로젝트를 필터링하고 필요한 수많은 파일 훅을 생성할 수 있습니다. 각 파일 훅은 GitLab에서 이벤트에 대해 비동기적으로 트리거됩니다. 이벤트 디렉터리은 시스템 훅 및 웹훅 문서를 참조하세요.
자체 파일 훅을 작성하고 지원하는 대신 GitLab 소스 코드를 직접 변경하여 상류로 기여할 수도 있습니다. 이렇게 하면 기능이 버전 간에 보존되고 테스트를 통과함이 보장됩니다.
사용자 정의 파일 훅 설정
파일 훅은 file_hooks
디렉터리에 있어야 합니다. 하위 디렉터리는 무시됩니다.
예제는
file_hooks
의 example
디렉터리에서 찾을 수 있습니다.
사용자 정의 훅을 설정하려면:
-
GitLab 서버에서 플러그인 디렉터리를 찾습니다. 소스 컴파일 설치의 경우 경로는通상
/home/git/gitlab/file_hooks/
입니다. Linux 패키지 설치의 경우, 경로는通상/opt/gitlab/embedded/service/gitlab-rails/file_hooks
입니다.여러 서버를 구성하는 경우, 훅 파일은 각 애플리케이션 서버에 있어야 합니다.
-
file_hooks
디렉터리 내에서 공백이나 특수 문자 없이 사용할 파일을 만듭니다. - 훅 파일을 실행 가능하게 만들고 Git 사용자가 소유되었는지 확인합니다.
- 파일 훅이 예상대로 작동하도록 코드를 작성합니다. 어떤 언어든 상관없으며, 상단에 ‘shebang’이 해당 언어 유형을 올바르게 반영하도록 합니다. 예를 들어, Ruby 스크립트인 경우, shebang은 아마도
#!/usr/bin/env ruby
일 것입니다. - 파일 훅에 제공되는 데이터는 ‘STDIN’에서 JSON으로 제공됩니다. 이는 시스템 훅과 동일합니다.
파일 훅 코드가 올바르게 구현되었다고 가정할 때, 훅은 적절하게 활성화됩니다. 파일 훅 디렉터리은 각 이벤트에 대해 업데이트됩니다. 새로운 파일 훅을 적용하려면 GitLab을 다시 시작할 필요가 없습니다.
파일 훅이 0이 아닌 종료 코드로 실행되거나 GitLab이 실행하지 못한 경우 다음 위치에 메시지가 기록됩니다:
- Linux 패키지 설치에서:
gitlab-rails/file_hook.log
- 소스 컴파일 설치에서:
log/file_hook.log
파일 훅 예제
이 예제는 project_create
이벤트에만 응답하고, GitLab 인스턴스에서 관리자에게 새 프로젝트가 생성되었음을 알립니다.
#!/opt/gitlab/embedded/bin/ruby
# 내장된 루비 버전을 사용하여 선택한 언어가 사용할 수 없는 가능성을 제거합니다.
require 'json'
require 'mail'
# 입력 변수는 JSON 형식이므로 먼저 구문 분석해야 합니다.
ARGS = JSON.parse($stdin.read)
# project_create 이벤트에서만 이 파일 훅을 트리거하려 합니다.
return unless ARGS['event_name'] == 'project_create'
# GitLab 인스턴스의 관리자에게 새 프로젝트가 생성되었음을 알립니다.
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 installations
sudo gitlab-rake file_hooks:validate
# Installations from source
cd /home/git/gitlab
bundle exec rake file_hooks:validate RAILS_ENV=production
출력의 예:
/file_hooks 디렉터리의 파일 훅 유효성 검사 중
* /home/git/gitlab/file_hooks/save_to_file.clj 성공 (종료 코드 0)
* /home/git/gitlab/file_hooks/save_to_file.rb 실패 (종료 코드 0이 아님)