InfoGrab DocsInfoGrab Docs

Harbor 레지스트리

요약

Harbor 레지스트리를 활성화하려면 그룹 또는 프로젝트에 대한 Harbor 통합을 구성해야 합니다. Harbor 인스턴스에서 데이터를 요청하려면 GitLab CI/CD 사전 정의된 변수와 함께 다음 Harbor 레지스트리 변수를 사용할 수 있습니다.

Harbor 레지스트리 활성화#

Harbor 레지스트리를 활성화하려면 그룹 또는 프로젝트에 대한 Harbor 통합을 구성해야 합니다. Harbor 구성에는 url, project_name, username, password의 네 가지 필드가 필요합니다.

필드 설명
url Harbor 인스턴스의 URL입니다.
project_name Harbor 인스턴스의 프로젝트 이름입니다.
username Harbor 인스턴스에 로그인하는 데 사용하는 사용자 이름입니다.
password Harbor 인스턴스에 로그인하는 데 사용하는 비밀번호입니다.

Harbor 인스턴스에서 데이터를 요청하려면 GitLab CI/CD 사전 정의된 변수와 함께 다음 Harbor 레지스트리 변수를 사용할 수 있습니다.

변수 설명
HARBOR_URL Harbor 인스턴스의 URL입니다.
HARBOR_HOST Harbor 인스턴스 URL의 호스트입니다.
HARBOR_OCI Harbor 인스턴스 URL의 OCI URL입니다.
HARBOR_PROJECT Harbor 인스턴스의 프로젝트 이름입니다.
HARBOR_USERNAME Harbor 인스턴스에 로그인하는 데 사용하는 사용자 이름입니다.
HARBOR_PASSWORD Harbor 인스턴스에 로그인하는 데 사용하는 비밀번호입니다.

설정 테스트#

설정을 테스트할 때 Harbor 인스턴스의 /api/v2.0/ping으로 요청이 전송됩니다. 테스트가 성공하면 상태 코드 200이 반환됩니다. 이 테스트는 주로 Harbor 인스턴스가 올바르게 구성되었는지 확인하는 것을 목적으로 합니다. usernamepassword가 올바른지는 확인하지 않습니다.

코드 구조#

app/controllers/concerns/harbor
├── access.rb
├── artifact.rb
├── repository.rb
└── tag.rb

app/controllers/projects/harbor
├── application_controller.rb
├── artifacts_controller.rb
├── repositories_controller.rb
└── tags_controller.rb

app/controllers/groups/harbor
├── application_controller.rb
├── artifacts_controller.rb
├── repositories_controller.rb
└── tags_controller.rb

app/models/integrations/harbor.rb

app/serializers/integrations/harbor_serializers
├── artifact_entity.rb
├── artifact_serializer.rb
├── repository_entity.rb
├── repository_serializer.rb
├── tag_entity.rb
└── tag_serializer.rb

lib/gitlab/harbor
├── client.rb
└── query.rb

app/controllers/projects/harborapp/controllers/groups/harbor 아래의 컨트롤러는 프론트엔드 호출을 위한 API 인터페이스를 제공합니다.

app/controllers/concerns/harbor 아래의 모듈은 컨트롤러에서 사용하는 몇 가지 공통 메서드를 제공합니다.

Harbor 통합 모델은 app/models/integrations 아래에 있으며, Harbor 통합을 위한 일부 구성 정보를 포함하고 있습니다.

app/serializers/integrations/harbor_serializers 아래의 시리얼라이저는 app/controllers/projects/harborapp/controllers/groups/harbor 아래의 컨트롤러에서 사용되며, 컨트롤러가 응답의 JSON 데이터를 직렬화하는 데 도움을 줍니다.

lib/gitlab/harbor 디렉터리에는 Harbor 클라이언트가 포함되어 있으며, 이 클라이언트는 Harbor 인스턴스에 API 요청을 전송하여 데이터를 가져옵니다.

시퀀스 다이어그램#

sequenceDiagram Client->>+GitLab: Harbor 레지스트리 요청 GitLab->>+Harbor instance: API를 통해 리포지터리 데이터 요청 Harbor instance->>+GitLab: 리포지터리 데이터 GitLab->>+Client: 리포지터리 데이터 반환 Client->>+GitLab: Harbor 레지스트리 아티팩트 요청 GitLab->>+Harbor instance: API를 통해 아티팩트 데이터 요청 Harbor instance->>+GitLab: 아티팩트 데이터 GitLab->>+Client: 아티팩트 데이터 반환 Client->>+GitLab: Harbor 레지스트리 태그 요청 GitLab->>+Harbor instance: API를 통해 태그 데이터 요청 Harbor instance->>+GitLab: 태그 데이터 GitLab->>+Client: 태그 데이터 반환

정책#

그룹 및 프로젝트에 대한 read_harbor_registry 정책은 사용자가 Harbor 레지스트리에 접근할 수 있는지 여부를 제어하는 데 사용됩니다. 이 정책은 최소한 Reporter 권한이 있는 모든 사용자에게 활성화됩니다.

프론트엔드 개발#

관련 프론트엔드 코드는 app/assets/javascripts/packages_and_registries/harbor_registry/ 디렉터리에 있습니다. 파일 구조는 다음과 같습니다:

├── components
│   ├── details
│   │   ├── artifacts_list_row.vue
│   │   ├── artifacts_list.vue
│   │   └── details_header.vue
│   ├── list
│   │   ├── harbor_list_header.vue
│   │   ├── harbor_list_row.vue
│   │   └── harbor_list.vue
│   ├── tags
│   │   ├── tags_header.vue
│   │   ├── tags_list_row.vue
│   │   └── tags_list.vue
│   └── harbor_registry_breadcrumb.vue
├── constants
│   ├── common.js
│   ├── details.js
│   ├── index.js
│   └── list.js
├── pages
│   ├── details.vue
│   ├── harbor_tags.vue
│   ├── index.vue
│   └── list.vue
├── index.js
├── router.js
└── utils.js

GraphQL 대신 REST API를 사용하는 이유는 이 토론을 참고하세요.

harbor_registry/pages/index.vue 파일에는 단일 Vue router-view 컴포넌트만 포함되어 있으며, router.js를 통해 이미지 목록, 이미지 상세, 태그 목록 페이지로 이동합니다.

registry_breadcrumb.vue 컴포넌트가 다단계 경로를 지원하지 않기 때문에 harbor_registry/components/harbor_registry_breadcrumb.vue 컴포넌트를 새로 구현했습니다.

harbor_registry_breadcrumb.vue에 경로 배열을 전달하여 다단계 breadcrumb 컴포넌트를 생성할 수 있습니다.

const routeNameList = [];
const hrefList = [];

this.breadCrumbState.updateName(nameList);
this.breadCrumbState.updateHref(hrefList);

Harbor 레지스트리

GitLab v19.1
원문 보기
요약

Harbor 레지스트리를 활성화하려면 그룹 또는 프로젝트에 대한 Harbor 통합을 구성해야 합니다. Harbor 인스턴스에서 데이터를 요청하려면 GitLab CI/CD 사전 정의된 변수와 함께 다음 Harbor 레지스트리 변수를 사용할 수 있습니다.

Harbor 레지스트리 활성화#

Harbor 레지스트리를 활성화하려면 그룹 또는 프로젝트에 대한 Harbor 통합을 구성해야 합니다. Harbor 구성에는 url, project_name, username, password의 네 가지 필드가 필요합니다.

필드 설명
url Harbor 인스턴스의 URL입니다.
project_name Harbor 인스턴스의 프로젝트 이름입니다.
username Harbor 인스턴스에 로그인하는 데 사용하는 사용자 이름입니다.
password Harbor 인스턴스에 로그인하는 데 사용하는 비밀번호입니다.

Harbor 인스턴스에서 데이터를 요청하려면 GitLab CI/CD 사전 정의된 변수와 함께 다음 Harbor 레지스트리 변수를 사용할 수 있습니다.

변수 설명
HARBOR_URL Harbor 인스턴스의 URL입니다.
HARBOR_HOST Harbor 인스턴스 URL의 호스트입니다.
HARBOR_OCI Harbor 인스턴스 URL의 OCI URL입니다.
HARBOR_PROJECT Harbor 인스턴스의 프로젝트 이름입니다.
HARBOR_USERNAME Harbor 인스턴스에 로그인하는 데 사용하는 사용자 이름입니다.
HARBOR_PASSWORD Harbor 인스턴스에 로그인하는 데 사용하는 비밀번호입니다.

설정 테스트#

설정을 테스트할 때 Harbor 인스턴스의 /api/v2.0/ping으로 요청이 전송됩니다. 테스트가 성공하면 상태 코드 200이 반환됩니다. 이 테스트는 주로 Harbor 인스턴스가 올바르게 구성되었는지 확인하는 것을 목적으로 합니다. usernamepassword가 올바른지는 확인하지 않습니다.

코드 구조#

app/controllers/concerns/harbor
├── access.rb
├── artifact.rb
├── repository.rb
└── tag.rb

app/controllers/projects/harbor
├── application_controller.rb
├── artifacts_controller.rb
├── repositories_controller.rb
└── tags_controller.rb

app/controllers/groups/harbor
├── application_controller.rb
├── artifacts_controller.rb
├── repositories_controller.rb
└── tags_controller.rb

app/models/integrations/harbor.rb

app/serializers/integrations/harbor_serializers
├── artifact_entity.rb
├── artifact_serializer.rb
├── repository_entity.rb
├── repository_serializer.rb
├── tag_entity.rb
└── tag_serializer.rb

lib/gitlab/harbor
├── client.rb
└── query.rb

app/controllers/projects/harborapp/controllers/groups/harbor 아래의 컨트롤러는 프론트엔드 호출을 위한 API 인터페이스를 제공합니다.

app/controllers/concerns/harbor 아래의 모듈은 컨트롤러에서 사용하는 몇 가지 공통 메서드를 제공합니다.

Harbor 통합 모델은 app/models/integrations 아래에 있으며, Harbor 통합을 위한 일부 구성 정보를 포함하고 있습니다.

app/serializers/integrations/harbor_serializers 아래의 시리얼라이저는 app/controllers/projects/harborapp/controllers/groups/harbor 아래의 컨트롤러에서 사용되며, 컨트롤러가 응답의 JSON 데이터를 직렬화하는 데 도움을 줍니다.

lib/gitlab/harbor 디렉터리에는 Harbor 클라이언트가 포함되어 있으며, 이 클라이언트는 Harbor 인스턴스에 API 요청을 전송하여 데이터를 가져옵니다.

시퀀스 다이어그램#

sequenceDiagram Client->>+GitLab: Harbor 레지스트리 요청 GitLab->>+Harbor instance: API를 통해 리포지터리 데이터 요청 Harbor instance->>+GitLab: 리포지터리 데이터 GitLab->>+Client: 리포지터리 데이터 반환 Client->>+GitLab: Harbor 레지스트리 아티팩트 요청 GitLab->>+Harbor instance: API를 통해 아티팩트 데이터 요청 Harbor instance->>+GitLab: 아티팩트 데이터 GitLab->>+Client: 아티팩트 데이터 반환 Client->>+GitLab: Harbor 레지스트리 태그 요청 GitLab->>+Harbor instance: API를 통해 태그 데이터 요청 Harbor instance->>+GitLab: 태그 데이터 GitLab->>+Client: 태그 데이터 반환

정책#

그룹 및 프로젝트에 대한 read_harbor_registry 정책은 사용자가 Harbor 레지스트리에 접근할 수 있는지 여부를 제어하는 데 사용됩니다. 이 정책은 최소한 Reporter 권한이 있는 모든 사용자에게 활성화됩니다.

프론트엔드 개발#

관련 프론트엔드 코드는 app/assets/javascripts/packages_and_registries/harbor_registry/ 디렉터리에 있습니다. 파일 구조는 다음과 같습니다:

├── components
│   ├── details
│   │   ├── artifacts_list_row.vue
│   │   ├── artifacts_list.vue
│   │   └── details_header.vue
│   ├── list
│   │   ├── harbor_list_header.vue
│   │   ├── harbor_list_row.vue
│   │   └── harbor_list.vue
│   ├── tags
│   │   ├── tags_header.vue
│   │   ├── tags_list_row.vue
│   │   └── tags_list.vue
│   └── harbor_registry_breadcrumb.vue
├── constants
│   ├── common.js
│   ├── details.js
│   ├── index.js
│   └── list.js
├── pages
│   ├── details.vue
│   ├── harbor_tags.vue
│   ├── index.vue
│   └── list.vue
├── index.js
├── router.js
└── utils.js

GraphQL 대신 REST API를 사용하는 이유는 이 토론을 참고하세요.

harbor_registry/pages/index.vue 파일에는 단일 Vue router-view 컴포넌트만 포함되어 있으며, router.js를 통해 이미지 목록, 이미지 상세, 태그 목록 페이지로 이동합니다.

registry_breadcrumb.vue 컴포넌트가 다단계 경로를 지원하지 않기 때문에 harbor_registry/components/harbor_registry_breadcrumb.vue 컴포넌트를 새로 구현했습니다.

harbor_registry_breadcrumb.vue에 경로 배열을 전달하여 다단계 breadcrumb 컴포넌트를 생성할 수 있습니다.

const routeNameList = [];
const hrefList = [];

this.breadCrumbState.updateName(nameList);
this.breadCrumbState.updateHref(hrefList);