파일 후크

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

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

파일 후크는 각 이벤트에서 실행됩니다. 파일 후크의 코드에서 이벤트 또는 프로젝트를 필터링하고 필요한 만큼 여러 파일 후크를 생성할 수 있습니다. 각 파일 후크는 GitLab에서 이벤트가 발생할 때 비동기적으로 작동합니다. 이벤트 디렉터리은 시스템 후크웹훅 설명서를 참조하세요.

note
파일 후크는 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. 파일 후크가 원하는 대로 작동하도록 코드를 작성합니다. 어떤 언어든 상관없으며, 상단에 ‘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 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이 아닌 종료 코드)