파일 후크
사용자 지정 파일 후크(서버 후크나 시스템 후크와 혼동해서는 안 됨)를 사용하여 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 ARGS['name'] + ' 새 프로젝트 생성됨'
body ARGS['owner_name'] + '님이 ' + 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 성공 (0 종료 코드)
* /home/git/gitlab/file_hooks/save_to_file.rb 실패 (0이 아닌 종료 코드)