InfoGrab DocsInfoGrab Docs

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

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

이 페이지는 GitLab 인테그레이션 을 구현하기 위한 개발 가이드라인을 제공합니다. 인테그레이션은 메인 Rails 프로젝트 의 일부입니다. 또한 인테그레이션에 대한 전략 개요를 확인하려면 방향성 페이지 를 참조하세요. 이 가이드는 현재 작성 중입니다. 설명이 필요하거나 오래된 정보를 발견한 경우 @gitlab-org/foundations/import-and-integrate 에 ping하세요. 새 인테그레이션 추가 # 인테그레이션 정의 # Integration 을 상속받는 새 모델을 app/models/integrations 에 추가합니다. 예를 들어, 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 concern을 사용할 수도 있습니다. 이는 연관된 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 해시에 직접 쓰면 안 되며 , 대신 생성된 setter 메서드를 반드시 사용해야 합니다 . 이 해시에 직접 쓰면