GitLab Go プロキシ

  • GitLab Premium13.1で導入されました
  • フィーチャーフラグで有効・無効を切り替えることができ、デフォルトでは無効になっています。
  • GitLab.comでは無効になっています。
  • 本番での使用はお勧めできません。
  • GitLabセルフマネージドインスタンスで使うには、GitLab管理者に頼んで有効にしてもらいましょう。

GitLab用のGoプロキシを使えば、GitLabのすべてのプロジェクトをGoプロキシプロトコルで取得することができます。

前提条件

Goプロキシを有効にします。

GitLab 用の Go プロキシは開発中のもので、大規模なリポジトリでのパフォーマンスにイシューが発生する可能性があるため、本番環境では使用できません。

デフォルトでは無効になっている機能フラグの後ろにデプロイされています。

GitLab RailsコンソールにアクセスできるGitLab管理者は、インスタンスでこれを有効にすることができます。

有効にするには:

Feature.enable(:go_proxy) # or

無効化するには:

Feature.disable(:go_proxy)

特定のプロジェクトで有効または無効にします:

Feature.enable(:go_proxy, Project.find(1))
Feature.disable(:go_proxy, Project.find(2))

パッケージレジストリの有効化

パッケージ・レジストリはデフォルトで新しいプロジェクトで有効になっています。 プロジェクトのサイドバーに{パッケージ} パッケージ > リストの項目が見つからない場合は、以下を確認してください:

  1. GitLab 管理者がパッケージレジストリのサポートを有効にしています。
  2. パッケージ・レジストリがプロジェクトで有効になっています。
注意: 現在 GitLab はプロジェクトのパッケージレジストリにGo モジュールを表示しません。 詳細はこのイシューに従ってください。

GitLab を Go プロキシとして追加します。

注意:Go プロキシを使用するには、Go 1.13 以降を使用している必要があります。

利用可能なプロキシエンドポイントは以下のとおりです:

  • プロジェクト - プロジェクトで定義されたモジュールを取得できます。/api/v4/projects/:id/packages/go

GitLab 用の Go プロキシを使って GitLab から Go モジュールを取得するには、適切なプロキシエンドポイントをGOPROXY. GOPROXYGo に追加します。GOPROXYGo の GOPROXY環境変数のGOPROXY設定については、環境変数の設定GOPROXYを参照してください。 のGOPROXY設定については GOPROXYGo の依存プロキシ管理 > プロキシ を参照してください。

例えば、プロジェクト固有のエンドポイントをGOPROXY に追加すると、Go は最初にそのエンドポイントをクエリし、デフォルトの動作にフォールバックします:

go env -w GOPROXY='https://gitlab.com/api/v4/projects/1234/packages/go,https://proxy.golang.org,direct'

この設定で、Goは依存関係を次のように取得します:

  1. プロジェクト固有のGoプロキシからの取得を試みます。
  2. proxy.golang.orgから取得しようとしています。
  3. バージョン管理システムのオペレーション(git clonesvn checkoutなど)で直接フェッチします。

GOPROXY 指定されていない場合、Go はステップ 2 と 3 に従います。これは GOPROXY https://proxy.golang.org,directGOPROXY 設定 GOPROXYすることに相当します。GOPROXY にプロジェクト固有のエンドポイントのみが含まれている場合、Go はそのエンドポイントにのみクエリを発行します。

非公開プロジェクトからモジュールを取得

go 以下の手順は、GitLab が HTTPS 用に設定されている場合にのみ機能します。

  1. GitLab用のGoプロキシから取得する際に、HTTPベーシック認証クレデンシャルを含めるようにGoを設定します。
  2. 公開チェックサムデータベースから非公開 GitLab プロジェクトのチェックサムのダウンロードをスキップするように Go を設定します。

リクエスト認証の有効化

api またはread_api スコープで個人アクセストークンを作成し、~/.netrcに追加します:

machine <url> login <username> password <token>

<url> には GitLab インスタンスの URL を指定します。たとえばgitlab.comのようにします。<username><token> には、それぞれユーザー名と個人アクセストークンを指定します。

チェックサムデータベースクエリの無効化

依存関係をダウンロードするとき、デフォルトでは Go 1.13 以降はフェッチされたソースをチェックサムデータベースに対して検証しますsum.golang.org。 フェッチされたソースのチェックサムがデータベースのチェックサムと一致しない場合、Go は依存関係をビルドしません。 プライベートモジュールのsum.golang.orgソースをフェッチできないためチェックサムを提供できないため、sum.golang.orgプライベートモジュールのビルドに失敗sum.golang.orgします。 このイシューを解決するには、GONOSUMDB をプライベートプロジェクトのカンマ区切りリストに設定する必要があります。 Go 環境変数の設定の詳細については、環境変数の設定を参照してください。 Go のこの機能を無効にする方法の詳細については、Go の依存関係管理 > チェックサムを参照してください。

例えば、gitlab.com/my/projectのチェックサムクエリを無効にするには、GONOSUMDBを設定します:

go env -w GONOSUMDB='gitlab.com/my/project,<previous value>'

Goでの作業

Go での依存関係の管理、または一般的な Go に慣れていない場合は、以下のドキュメントをレビューしてください:

環境変数の設定

GOPATH $GOPATH/envGo は環境変数を使用してさまざまな機能を制御します。 環境変数は通常の方法で管理できますが、Go 1.14 では特別な Go 環境ファイル~/.go/env から読み書きしますGOENVGOENV

Go の環境変数は、go env <var> で読み込むことができ、Go 1.14 以降では、go env -w <var>=<value>で書き込むことができます。 たとえば、go env GOPATHgo env -w GOPATH=/goなどです。

モジュールのリリース

Go モジュールとモジュールのバージョンは、Git、SVN、Mercurial などのソースリポジトリによって定義されます。 モジュールは、go.mod Go ファイルをgo.mod含むリポジトリですgo.mod 。 モジュールのバージョンは、VCS タグによって定義されます。 モジュールを公開するには、go.modソースファイルを VCS リポジトリにgo.mod プッシュgo.modします。 モジュールのバージョンを公開するには、VCS タグをプッシュします。 有効なモジュールやモジュールのバージョンの構成について詳しくは、Go の依存関係管理 > バージョン管理を参照してください。