ハーバーレジストリ

ハーバーレジストリの有効化

Harbor レジストリを有効にするには、グループまたはプロジェクトの Harbor インテグレーションを設定する必要があります。Harbor 設定には 4 つのフ ィ ール ド が必要です:url project_nameusernamepassword

項目説明
urlHarborインスタンスのURL。
project_nameHarborインスタンスのプロジェクト名。
usernameHarbor インスタンスへのログインに使用するユーザー名。
passwordHarbor インスタンスへのログインに使用するパスワード。

GitLab CI/CD の定義済み変数と以下の Harbor レジストリ変数を使用して、Harbor インスタンスにデータを要求できます。

変数説明
HARBOR_URLHarborインスタンスのURL。
HARBOR_HOSTHarbor インスタンスの URL のホスト。
HARBOR_OCIHarbor インスタンス URL の OCI URL。
HARBOR_PROJECTHarborインスタンスのプロジェクト名。
HARBOR_USERNAMEHarbor インスタンスへのログインに使用するユーザー名。
HARBOR_PASSWORDHarbor インスタンスへのログインに使用するパスワード。

テスト設定

設定をテストする場合、リクエストはハーバー・インスタンスの/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: Request Harbor Registry GitLab->>+Harbor instance: Request repositories data via API Harbor instance->>+GitLab: Repositories data GitLab->>+Client: Return repositories data Client->>+GitLab: Request Harbor Registry artifacts GitLab->>+Harbor instance: Request artifacts data via API Harbor instance->>+GitLab: Artifacts data GitLab->>+Client: Return artifacts data Client->>+GitLab: Request Harbor Registry tags GitLab->>+Harbor instance: Request tags data via API Harbor instance->>+GitLab: Tags data GitLab->>+Client: Return tags data

ポリシー

グループとプロジェクトのread_harbor_registry ポリシーは、ユーザーが Harbor レジストリにアクセスできるかどうかを制御するために使用されます。このポリシーは、レポーターロール以上のすべてのユーザーで有効になります。

フロントエンド開発者

関連するフロントエンドのコードは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
note
GraphQLの代わりにREST APIを使用する理由については、このディスカッションを参照してください。

ファイルharbor_registry/pages/index.vue には Vue のルータービューコンポーネントが 1 つだけ含まれており、router.jsを経由してimages listimage detailtags list のページに移動します。

registry_breadcrumb.vue コンポーネントはマルチレベルパスをサポートしていないため、harbor_registry/components/harbor_registry_breadcrumb.vue コンポーネントを再実装しました。

harbor_registry_breadcrumb.vue にパス配列を渡すことで、マルチレベルのパンくずコンポーネントを生成することができます。

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

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