파일 후크

상세 정보: Tier: Free, Premium, Ultimate Offering: Self-managed

서버 후크 또는 시스템 후크와 혼동하지 않도록 주의하십시오. GitLab 소스 코드를 수정하지 않고 사용자 정의 통합을 소개하는 데 사용자 정의 파일 후크를 사용할 수 있습니다.

파일 후크는 각 이벤트에서 실행됩니다. 파일 후크의 코드에서 이벤트나 프로젝트를 필터링하고 필요한 만큼 많은 파일 후크를 생성할 수 있습니다. 각 파일 후크는 GitLab이 비동기적으로 이벤트에 따라 트리거됩니다. 이벤트 목록은 시스템 후크웹훅 설명서를 참조하세요.

참고: 파일 후크는 GitLab 서버의 파일 시스템에서 구성해야 합니다. 이 작업을 완료할 수 있는 권한은 GitLab 서버 관리자에게 있습니다. 파일 시스템 액세스가 없는 경우 웹훅을 옵션으로 고려하십시오.

자체 파일 후크를 작성하고 지원하는 대신 GitLab 소스 코드에 직접 변경을 가할 수 있고 상류로 기여할 수도 있습니다. 이렇게 함으로써 기능이 버전 간에 보존되고 테스트에 의해 지원되도록 할 수 있습니다.

사용자 정의 파일 후크 설정

파일 후크는 file_hooks 디렉토리에 있어야 합니다. 하위 디렉토리는 무시됩니다. 예제는 file_hooks 디렉토리의 example 디렉토리에서 찾을 수 있습니다.

사용자 정의 후크를 설정하려면:

  1. GitLab 서버에서 플러그인 디렉토리를 찾으세요. 소스 컴파일된 설치의 경우 경로는 일반적으로 /home/git/gitlab/file_hooks/입니다. Linux 패키지 설치의 경우 경로는 일반적으로 /opt/gitlab/embedded/service/gitlab-rails/file_hooks입니다. 다중 서버 구성의 경우 후크 파일은 각 응용 프로그램 서버에 있어야 합니다.

  2. file_hooks 디렉토리 안에 공백이나 특수 문자 없이 원하는 이름의 파일을 만드세요.

  3. 후크 파일을 실행 가능하게 하고 Git 사용자가 소유하도록 하십시오.

  4. 필요에 따라 후크 파일에 필요한 대로 기능하는 코드를 작성하십시오. 언어에 관계 없이 상단의 ‘셰뱅’이 해당 언어 유형을 적절하게 나타내도록 하십시오. 예를 들어, Ruby로 작성된 스크립트라면 셰뱅은 아마도 #!/usr/bin/env ruby일 것입니다.

  5. 파일 후크에 제공되는 데이터는 ‘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 설치
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이 아닌 종료 코드)