GitLab用のGoプロキシ
GitLab用のGoプロキシを使えば、GitLabのすべてのプロジェクトをGoプロキシプロトコルで取得することができます。
Go プロキシが使用する特定の API エンドポイントのドキュメントについては、Go プロキシ API ドキュメントを参照してください。
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 を Go プロキシとして追加します。
GitLabをGoプロキシとして使うには、Go 1.13以降を使う必要があります。
利用可能なプロキシエンドポイントは、プロジェクトごとにモジュールを取得するためのものです:/api/v4/projects/:id/packages/go
GitLab から Go モジュールを取得するには、プロジェクト固有のエンドポイントをGOPROXY
に追加します。
Go はこのエンドポイントをクエリし、デフォルトの挙動に戻ります:
go env -w GOPROXY='https://gitlab.example.com/api/v4/projects/1234/packages/go,https://proxy.golang.org,direct'
この設定では、Go は依存関係をこの順序で取得します:
- Go はプロジェクト固有の Go プロキシから取得しようとします。
- Go は
proxy.golang.org
から取得しようとします。 - Goはバージョン管理システムのオペレーションで直接フェッチします(
git clone
、svn checkout
など)。
GOPROXY
指定されていない場合、Go はステップ 2 と 3 に従います。これは GOPROXY
https://proxy.golang.org,direct
にGOPROXY
設定することに対応 GOPROXY
します。GOPROXY
にプロジェクト固有のエンドポイントだけが含まれている場合、Go はそのエンドポイントだけをクエリします。
Go 環境変数の設定方法の詳細については、環境変数の設定を参照してください。
GOPROXY
の設定の詳細については、Go > Proxies の依存プロキシ管理を参照してください。
非公開プロジェクトからのモジュールの取得
go
は、安全でない接続での認証情報の送信をサポートしていません。以下の手順は、GitLab が HTTPS 用に設定されている場合にのみ機能します:
- GitLab 用の Go プロキシから取得するときに HTTP 基本認証クレデンシャルを含めるように Go を設定します。
- 公開チェックサムデータベースから非公開 GitLab プロジェクトのチェックサムのダウンロードをスキップするように Go を設定します。
リクエスト認証の有効化
スコープをapi
またはread_api
に設定した個人アクセストークンを作成します。
~/.netrc
ファイルを開き、以下のテキストを追加します。< >
の変数をあなたの値に置き換えてください。
NETRC
という環境変数を使用する場合、Go はその値をファイル名として使用し、~/.netrc
.NET は ~/.netrc
無視します。GitLab CIで~/.netrc
使用する場合は ~/.netrc
、NETRC
を環境変数名として使用しないでください。machine <url> login <username> password <token>
-
<url>
:GitLabのURL、例えばgitlab.com
。 -
<username>
:ユーザー名。 -
<token>
:個人アクセストークン。
チェックサムデータベースクエリの無効化
Go 1.13 以降で依存関係をダウンロードする場合、フェッチされたソースはチェックサムデータベースsum.golang.org
に対して検証されます。
フェッチされたソースのチェックサムがデータベースのチェックサムと一致しない場合、Goは依存関係をビルドしません。
非公開モジュールのビルドに失敗するのは、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 全般に慣れていない場合は、以下のドキュメントをレビューしてください:
環境変数の設定
Goは様々な機能を制御するために環境変数を使用します。環境変数は通常の方法で管理できます。ただし、Go 1.14 では、特別な Go 環境ファイル~/.go/env
(デフォルト) との間で Go 環境変数の読み書きを行います。
-
GOENV
がファイルに設定されている場合、Go は代わりにそのファイルに読み書きします。 -
GOENV
が設定されておらず、GOPATH
が設定されている場合、Go は$GOPATH/env
を読み書きします。
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 ファイルを含むリポジトリです。モジュールのバージョンはバージョン管理システム(VCS) タグによって定義されます。
モジュールを公開するには、go.mod
とソースファイルを VCS リポジトリにプッシュします。モジュールのバージョンを公開するには、VCS タグをプッシュします。
有効なモジュールやモジュールのバージョンの構成について詳しくは、Go > Versioning の Dependency Managementを参照してください。