正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

パッケージの依存プロキシ

  • プラン: Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
  • ステータス: ベータ

依存プロキシはベータ版です。この機能を使用する前に、ドキュメントを注意深く確認してください。

GitLab依存プロキシは、パッケージのコピーをダウンロードして保存するローカルプロキシサーバーです。

最初にパッケージをリクエストすると、GitLabはアップストリームパッケージレジストリからそれをフェッチし、プロジェクトにコピーを保存します。同じパッケージを再度リクエストすると、GitLabはプロジェクトのパッケージレジストリに保存されているコピーを提供します。

このアプローチにより、外部ソースからのダウンロード数が減り、パッケージビルドが高速化されます。

依存プロキシを有効にする

パッケージに依存プロキシを使用するには、プロジェクトが適切に設定されていること、およびキャッシュからプルするユーザー権限を持つユーザーが、必要な認証を持っていることを確認してください:

  1. グローバル設定で、次の機能が無効になっている場合は、有効にします:
  2. プロジェクト設定で、package機能が無効になっている場合は、有効にします。これはデフォルトで有効になっています。
  3. 認証方法を追加します。依存プロキシは、パッケージレジストリと同じ認証方法をサポートしています:

高度なキャッシュ

可能な場合、パッケージの依存プロキシは、高度なキャッシュを使用して、プロジェクトのパッケージレジストリにパッケージを保存します。

高度なキャッシュは、プロジェクトのパッケージレジストリとアップストリームパッケージレジストリ間のコヒーレンスを検証します。アップストリームレジストリに更新されたファイルがある場合、依存プロキシはそれらを使用してキャッシュされたファイルを更新します。

高度なキャッシュがサポートされていない場合、依存プロキシはデフォルトの動作に戻ります:

  • リクエストされたファイルがプロジェクトのパッケージレジストリにある場合、それが返されます。
  • ファイルが見つからない場合は、アップストリームパッケージレジストリからフェッチされます。

高度なキャッシュのサポートは、アップストリームパッケージレジストリが依存プロキシのリクエストにどのように応答するか、および使用するパッケージ形式によって異なります。

Mavenパッケージの場合:

パッケージレジストリ高度なキャッシュはサポートされていますか?
GitLabcheck-circle 対応
Maven Centralcheck-circle 対応
Artifactorycheck-circle 対応
Sonatype Nexuscheck-circle 対応
GitHub Packagesdotted-circle 非対応

権限

依存プロキシがファイルをプルすると、次のようになります:

  1. 依存プロキシは、プロジェクトのパッケージレジストリ内のファイルを検索します。これは読み取り操作です。
  2. 依存プロキシは、パッケージファイルをプロジェクトのパッケージレジストリに公開する可能性があります。これは書き込み操作です。

両方のステップが実行されるかどうかは、ユーザー権限によって異なります。依存プロキシは、パッケージレジストリと同じユーザー権限を使用します。

プロジェクトの表示レベル最低限必要なロールパッケージファイルを読み取りできますか?パッケージファイルを書き込むことができますか?動作
公開匿名dotted-circle 非対応dotted-circle 非対応リクエストは拒否されました。
公開ゲストcheck-circle 対応dotted-circle 非対応パッケージファイルは、キャッシュまたはリモートレジストリのいずれかから返されました。
公開デベロッパーcheck-circle 対応check-circle 対応パッケージファイルは、キャッシュまたはリモートレジストリのいずれかから返されました。ファイルはキャッシュに公開されます。
内部匿名dotted-circle 非対応dotted-circle 非対応リクエストは拒否されました
内部ゲストcheck-circle 対応dotted-circle 非対応パッケージファイルは、キャッシュまたはリモートレジストリのいずれかから返されました。
内部デベロッパーcheck-circle 対応check-circle 対応パッケージファイルは、キャッシュまたはリモートレジストリのいずれかから返されました。ファイルはキャッシュに公開されます。
非公開匿名dotted-circle 非対応dotted-circle 非対応リクエストは拒否されました
非公開レポーターcheck-circle 対応dotted-circle 非対応パッケージファイルは、キャッシュまたはリモートレジストリのいずれかから返されました。
非公開デベロッパーcheck-circle 対応check-circle 対応パッケージファイルは、キャッシュまたはリモートレジストリのいずれかから返されました。ファイルはキャッシュに公開されます。

少なくとも、依存プロキシを使用できるユーザーは、プロジェクトのパッケージレジストリも使用できます。

キャッシュが時間の経過とともに適切に設定されるようにするには、少なくともデベロッパーロールを持つユーザーが依存プロキシを使用してパッケージをプルするようにする必要があります。

クライアントを設定する

依存プロキシのクライアントを設定することは、パッケージレジストリのクライアントを設定することに似ています。

Mavenパッケージの場合

Mavenパッケージの場合、パッケージレジストリでサポートされているすべてのクライアントが依存プロキシでサポートされています:

  • mvn
  • gradle
  • sbt

認証の場合、Mavenパッケージレジストリで受け入れられるすべてのメソッドを使用できます。複雑でないため、Basic HTTP認証方式を使用する必要があります。

クライアントを設定するには:

  1. Basic HTTP認証の手順に従ってください。

    エンドポイントURL https://gitlab.example.com/api/v4/projects/<project_id>/dependency_proxy/packages/mavenを使用していることを確認してください。

  2. クライアントの設定を完了します:

Basic HTTP認証が受け入れられます。ただし、mvnが使用するネットワークリクエストの数を減らすために、カスタムHTTPヘッダー認証を使用する必要があります。

pom.xmlファイルにrepository要素を追加します:

<repositories>
  <repository>
    <id>gitlab-maven</id>
    <url>https://gitlab.example.com/api/v4/projects/<project_id>/dependency_proxy/packages/maven</url>
  </repository>
</repositories>

各設定項目の意味は次のとおりです:

  • <project_id>は、依存プロキシとして使用されるプロジェクトのIDです。
  • <id>には、認証構成で使用される<server>の名前が含まれています。

デフォルトでは、Maven CentralはSuper POMを介して最初にチェックされます。ただし、GitLabエンドポイントを最初にチェックするようにmvnを強制する場合があります。これを行うには、リクエストの転送の手順に従ってください。

repositoriesセクションをbuild.gradleファイルに追加します。

  • Groovy DSLの場合:

    repositories {
        maven {
            url "https://gitlab.example.com/api/v4/projects/<project_id>/dependency_proxy/packages/maven"
            name "GitLab"
            credentials(PasswordCredentials) {
                username = 'REPLACE_WITH_NAME'
                password = gitLabPrivateToken
            }
            authentication {
                basic(BasicAuthentication)
            }
        }
    }
  • Kotlin DSLの場合:

    repositories {
        maven {
            url = uri("https://gitlab.example.com/api/v4/projects/<project_id>/dependency_proxy/packages/maven")
            name = "GitLab"
            credentials(BasicAuthentication::class) {
                username = "REPLACE_WITH_NAME"
                password = findProperty("gitLabPrivateToken") as String?
            }
            authentication {
                create("basic", BasicAuthentication::class)
            }
        }
    }

この例では:

  • <project_id>は、依存プロキシとして使用されるプロジェクトのIDです。
  • REPLACE_WITH_NAMEについては、Basic HTTP認証セクションで説明します。

build.sbtに次の行を追加します:

resolvers += ("gitlab" at "https://gitlab.example.com/api/v4/projects/<project_id>/dependency_proxy/packages/maven")

credentials += Credentials("GitLab Packages Registry", "<host>", "<name>", "<token>")

この例では:

  • <project_id>は、依存プロキシとして使用されるプロジェクトのIDです。
  • <host>は、プロトコルスキームまたはポートなしで、<endpoint url>に存在するホストです。例: gitlab.example.com
  • <name>および<token>については、Basic HTTP認証セクションで説明します。

リモートレジストリを設定する

依存プロキシは、次のように設定する必要があります:

  • リモートパッケージレジストリのURL。
  • オプション。必要な認証情報。

これらのパラメータを設定するには:

  1. 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
  2. 設定 > パッケージとレジストリを選択します。
  3. パッケージレジストリを展開します。
  4. 依存プロキシで、パッケージ形式のフォームに入力します:

Mavenパッケージレジストリはすべて、依存プロキシに接続できます。Mavenパッケージレジストリのユーザー名とパスワードを使用して、接続を承認できます。

リモートMavenパッケージレジストリを設定または更新するには、フォームで次のフィールドを更新します:

  • URL - リモートレジストリのURL。
  • Username - オプション。リモートレジストリで使用するユーザー名。
  • Password - オプション。リモートレジストリで使用するパスワード。

ユーザー名とパスワードの両方を設定するか、両方のフィールドを空のままにする必要があります。

トラブルシューティング

手動ファイルプルエラー

cURLを使用して手動でファイルをプルできます。ただし、次のいずれかの応答が発生する可能性があります:

  • 404 Not Found - 依存プロキシの設定オブジェクトが見つかりませんでした。これは、オブジェクトが存在しないか、要件が満たされていないためです。
  • 401 Unauthorized - ユーザーは適切に認証されましたが、依存プロキシオブジェクトにアクセスするための適切なユーザー権限がありませんでした。
  • 403 Forbidden - GitLabライセンスレベルに問題がありました。
  • 502 Bad Gateway - リモートパッケージレジストリがファイルのリクエストを完了できませんでした。依存プロキシの設定を確認します。
  • 504 Gateway Timeout - リモートパッケージレジストリがタイムアウトしました。依存プロキシの設定を確認します。
curl --fail-with-body --verbose "https://<username>:<personal access token>@gitlab.example.com/api/v4/projects/<project_id>/dependency_proxy/packages/maven/<group id and artifact id>/<version>/<file_name>"
  • <username><personal access token>は、GitLabインスタンスの依存プロキシにアクセスするための認証情報です。
  • <project_id>はプロジェクトIDです。
  • <group id and artifact id>は、フォワードスラッシュで結合されたMavenパッケージグループIDとアーティファクトIDです。
  • <version>は、パッケージのバージョンです。
  • file_nameは、ファイルの正確な名前です。

たとえば、次のパッケージがあるとします:

  • グループID: com.my_company
  • アーティファクトID: my_package
  • バージョン: 1.2.3

パッケージを手動でプルするリクエストは次のとおりです:

curl --fail-with-body --verbose "https://<username>:<personal access token>@gitlab.example.com/api/v4/projects/<project_id>/dependency_proxy/packages/maven/com/my_company/my_package/1.2.3/my_package-1.2.3.pom"