InfoGrab DocsInfoGrab Docs

인테그레이션 개발 가이드라인

GitLab 인테그레이션을 구현하기 위한 개발 가이드라인과 모범 사례를 설명합니다.

이 페이지는 메인 Rails 프로젝트 의 일부인 GitLab 인테그레이션 을 구현할 때 적용하는 개발 가이드라인을 설명합니다. 인테그레이션 관련 전략의 개요는 방향성 페이지 도 참고합니다. 이 가이드는 작성 중입니다. 설명이 더 필요하거나 오래된 정보를 발견하면 @gitlab-org/foundations/import-and-integrate 를 편하게 멘션해도 됩니다. 새 인테그레이션 추가 # 인테그레이션 정의 # app/models/integrations 에 Integration 을 상속하는 새 모델을 추가합니다. 예를 들어 app/models/integrations/foo_bar.rb 의 Integrations::FooBar 가 그렇습니다. 특정 유형의 인테그레이션에는 다음 기반 모듈을 포함할 수 있습니다. Integrations::Base::ChatNotification Integrations::Base::Ci Integrations::Base::IssueTracker Integrations::Base::Monitoring Integrations::Base::SlashCommands Integrations::Base::ThirdPartyWiki 주로 외부 서비스로 HTTP 호출을 트리거하는 인테그레이션에는 Integrations::HasWebHook 컨선을 사용할 수도 있습니다. 이 컨선은 연결된 ServiceHook 모델을 통해 GitLab의 웹훅 기능 을 재사용하고, 인테그레이션 설정에서 볼 수 있는 요청 로그를 자동으로 기록합니다. 인테그레이션의 언더스코어 이름( 'foo_bar' )을 Integration::INTEGRATION_NAMES 에 추가합니다. 인테그레이션을 Project 의 연관으로 추가합니다. has_one :foo_bar_integration , class_name: 'Integrations::FooBar' 필드 정의 # 인테그레이션은 Integration.field 클래스 메서드로 구성을 저장할 임의의 필드를 정의할 수 있습니다. 값은 integrations.encrypted_properties 칼럼에 암호화된 JSON 해시로 저장됩니다. 예를 들면 다음과 같습니다. module Integrations class FooBar < Integration field :url field :tags end end Integration.field 는 클래스에 접근자 메서드를 설치합니다. 위 예시에서는 url 필드를 관리하는 #url , #url= , #url_changed? 가 만들어집니다. 이 접근자는 다른 ActiveRecord 속성과 마찬가지로 모델에서 Integration#properties 에 저장된 필드에 직접 접근해야 합니다. 필드는 항상 getters 를 통해 접근해야 하고 properties 해시를 직접 다루지 않아야 합니다. properties 해시에 직접 쓰지 말고 생성된 세터 메서드를 사용해야 합니다. 이 해시에 직접 쓴 값은 저장되지 않습니다. 이 필드가 인테그레이션의 프론트엔드 폼에