파일 훅

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

사용자 지정 파일 훅(서버 훅 또는 시스템 훅과 혼동해서는 안 됨)을 사용하여 GitLab 소스 코드를 수정하지 않고 사용자 정의 통합을 소개할 수 있습니다.

파일 훅은 각 이벤트마다 실행됩니다. 훅의 코드에서 이벤트나 프로젝트를 필터링하고 필요한 수많은 파일 훅을 생성할 수 있습니다. 각 파일 훅은 GitLab에서 이벤트에 대해 비동기적으로 트리거됩니다. 이벤트 디렉터리은 시스템 훅웹훅 문서를 참조하세요.

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

자체 파일 훅을 작성하고 지원하는 대신 GitLab 소스 코드를 직접 변경하여 상류로 기여할 수도 있습니다. 이렇게 하면 기능이 버전 간에 보존되고 테스트를 통과함이 보장됩니다.

사용자 정의 파일 훅 설정

파일 훅은 file_hooks 디렉터리에 있어야 합니다. 하위 디렉터리는 무시됩니다. 예제는 file_hooksexample 디렉터리에서 찾을 수 있습니다.

사용자 정의 훅을 설정하려면:

  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으로 제공됩니다. 이는 시스템 훅과 동일합니다.

파일 훅 코드가 올바르게 구현되었다고 가정할 때, 훅은 적절하게 활성화됩니다. 파일 훅 디렉터리은 각 이벤트에 대해 업데이트됩니다. 새로운 파일 훅을 적용하려면 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이 아님)