파일 훅

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

사용자 지정 파일 훅(server hooks 또는 system hooks와 혼동해서는 안 됨)은 GitLab 소스 코드를 수정하지 않고도 사용자 지정 통합을 도입하는 데 사용됩니다.

파일 훅은 각 이벤트에 실행됩니다. 파일 훅의 코드에서 이벤트나 프로젝트를 필터링하고 필요한만큼 많은 파일 훅을 만들 수 있습니다. 각 파일 훅은 이벤트 발생 시 GitLab에서 비동기적으로 트리거됩니다. 이벤트 목록은 system hookswebhooks 설명서를 참조하세요.

참고: 파일 훅은 GitLab 서버의 파일 시스템에서 구성해야 합니다. 이 작업은 GitLab 서버 관리자만 수행할 수 있습니다. 파일 시스템 액세스 권한이 없는 경우 system hooks 또는 webhooks을 옵션으로 살펴보세요.

자체 파일 훅을 작성하고 지원하는 대신 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. 파일 훅이 예상대로 작동하도록 코드를 작성합니다. 언어와 일치하는 ‘shebang’가 맨 위에 있는지 확인하세요. 예를 들어, Ruby로 작성된 스크립트의 경우 shebang는 아마도 #!/usr/bin/env ruby가 될 것입니다.
  5. 파일 훅에 제공되는 데이터는 STDIN에서 JSON으로 제공됩니다. 이는 system hooks와 정확히 동일합니다.

파일 훅 코드가 적절히 구현된 경우 해당 내용에 따라 훅이 적절하게 실행됩니다. 파일 훅 목록은 각 이벤트마다 업데이트됩니다. 새로운 파일 훅을 적용하려면 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 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이 아닌 종료 코드)