파일 후크

Tier: Free, Premium, Ultimate Offering: Self-managed

커스텀 파일 후크를 사용하여 GitLab 소스 코드를 수정하지 않고도 커스텀 통합을 도입합니다.

파일 후크는 각 이벤트에서 실행됩니다. 파일 후크의 코드에서 이벤트나 프로젝트를 필터링할 수 있으며 필요한 만큼 여러 개의 파일 후크를 생성할 수 있습니다. 각 파일 후크는 이벤트가 발생했을 때 GitLab에 의해 비동기적으로 트리거됩니다. 이벤트 목록은 system hookswebhooks 문서를 참조하세요.

note
파일 후크는 GitLab 서버의 파일 시스템에 구성되어야 합니다. 파일 시스템 접근 권한이 없는 경우 system hooks 또는 webhooks를 옵션으로 탐색하세요.

자신의 파일 후크를 작성하고 지원하는 대신, GitLab 소스 코드를 직접 수정하고 업스트림에 기여할 수 있습니다. 이렇게 하면 기능이 버전 간에 유지되고 테스트로 커버됩니다.

커스텀 파일 후크 설정

파일 후크는 file_hooks 디렉토리에 있어야 합니다. 하위 디렉토리는 무시됩니다. 예제를 보려면 file_hooks 하의 example 디렉토리를 참고하세요.

커스텀 후크를 설정하려면:

  1. GitLab 서버에서 플러그인 디렉토리를 찾습니다.
    자가 컴파일 설치의 경우 경로는 일반적으로 /home/git/gitlab/file_hooks/입니다.
    리눅스 패키지 설치의 경우 경로는 보통 /opt/gitlab/embedded/service/gitlab-rails/file_hooks입니다.

    다중 서버 구성의 경우, 후크 파일은 각 애플리케이션 서버에 존재해야 합니다.

  2. file_hooks 디렉토리 내부에 공백이나 특수 문자가 없는 원하시는 이름의 파일을 생성합니다.

  3. 후크 파일을 실행 가능하도록 설정하고 Git 사용자에게 소유권이 있는지 확인합니다.

  4. 파일 후크가 예상대로 기능하도록 코드를 작성합니다. 이는 어떤 언어로든 가능하며, 상단의 ‘shebang’이 언어 유형을 적절히 반영하는지 확인해야 합니다. 예를 들어, 스크립트가 Ruby로 작성된 경우 shebang은 아마도 #!/usr/bin/env ruby일 것입니다.

  5. 파일 후크에 대한 데이터는 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) 코드)