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))
パッケージレジストリの有効化
パッケージ・レジストリはデフォルトで新しいプロジェクトで有効になっています。 プロジェクトのサイドバーに{パッケージ} パッケージ > リストの項目が見つからない場合は、以下を確認してください:
- GitLab 管理者がパッケージレジストリのサポートを有効にしています。
- パッケージ・レジストリがプロジェクトで有効になっています。
GitLab を Go プロキシとして追加します。
利用可能なプロキシエンドポイントは以下のとおりです:
- プロジェクト - プロジェクトで定義されたモジュールを取得できます。
/api/v4/projects/:id/packages/go
GitLab 用の Go プロキシを使って GitLab から Go モジュールを取得するには、適切なプロキシエンドポイントをGOPROXY
. GOPROXY
Go に追加します。GOPROXY
Go の GOPROXY
環境変数のGOPROXY
設定については、環境変数の設定GOPROXY
を参照してください。 のGOPROXY
設定については GOPROXY
、Go の依存プロキシ管理 > プロキシ を参照してください。
例えば、プロジェクト固有のエンドポイントをGOPROXY
に追加すると、Go は最初にそのエンドポイントをクエリし、デフォルトの動作にフォールバックします:
go env -w GOPROXY='https://gitlab.com/api/v4/projects/1234/packages/go,https://proxy.golang.org,direct'
この設定で、Goは依存関係を次のように取得します:
- プロジェクト固有のGoプロキシからの取得を試みます。
- proxy.golang.orgから取得しようとしています。
- バージョン管理システムのオペレーション(
git clone
、svn checkout
など)で直接フェッチします。
GOPROXY
指定されていない場合、Go はステップ 2 と 3 に従います。これは GOPROXY
https://proxy.golang.org,direct
にGOPROXY
設定 GOPROXY
することに相当します。GOPROXY
にプロジェクト固有のエンドポイントのみが含まれている場合、Go はそのエンドポイントにのみクエリを発行します。
非公開プロジェクトからモジュールを取得
go
以下の手順は、GitLab が HTTPS 用に設定されている場合にのみ機能します。
- GitLab用のGoプロキシから取得する際に、HTTPベーシック認証クレデンシャルを含めるようにGoを設定します。
- 公開チェックサムデータベースから非公開 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/env
Go は環境変数を使用してさまざまな機能を制御します。 環境変数は通常の方法で管理できますが、Go 1.14 では特別な Go 環境ファイル~/.go/env
から読み書きしますGOENV
。 GOENV
Go の環境変数は、go env <var>
で読み込むことができ、Go 1.14 以降では、go env -w <var>=<value>
で書き込むことができます。 たとえば、go env
GOPATH
やgo 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 の依存関係管理 > バージョン管理を参照してください。