Go モジュールを Artifact Registry に保存する
非公開の Artifact Registry Go リポジトリを設定し、そこにモジュールをアップロードして、モジュールを依存関係として使用します。
準備
-
Sign in to your Google Account.
If you don't already have one, sign up for a new account.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Go 1.15 以降をインストールします。
package-go-module
gcloud CLI アドオンをインストールします。
gcloud components install package-go-module
リポジトリを作成する
新しいリポジトリを作成して構成する手順は、次のとおりです。
次のコマンドを実行して新しいリポジトリを作成します。
gcloud artifacts repositories create REPOSITORY \ --repository-format=go \ --location=LOCATION \ --description=DESCRIPTION
以下を置き換えます。
次のコマンドを実行して、リポジトリの詳細を表示します。
gcloud artifacts repositories describe --location=LOCATION REPOSITORY
出力は次のようになります。
Encryption: Google-managed key Repository Size: 0.000MB createTime: '2022-06-03T20:20:01.644813Z' format: GO mode: STANDARD_REPOSITORY name: projects/my-project/locations/us-west1/repositories/my-repo updateTime: '2022-06-03T20:20:01.644813Z'
gcloud コマンドのデフォルトを設定する
プロジェクト、リポジトリ、ロケーションの値のデフォルトを構成することで、gcloud CLI
コマンドを簡素化できます。デフォルトを構成すると、タグ --project
、--location
、--repository
は不要です。
Go モジュールをパッケージ化してアップロードする
package-go-module
gcloud CLI アドオンを使用すると、Go モジュールがパッケージ化されます。これにより、gcloud
コマンドを使用して Artifact Registry をバージョニングしてアップロードできます。
Go モジュールを作成する
まず、リポジトリにアップロードするシンプルな Go モジュールを作成します。
ホーム ディレクトリで、モジュール用に「foo」というディレクトリを作成します。
mkdir foo
ディレクトリをモジュールのディレクトリに変更し、
go mod init
を実行してモジュールの go.mod ファイルを作成します。cd foo \ go mod init example.com/foo
example.com/foo
は、モジュールパスに置き換えます。詳細については、Go モジュールのリファレンスをご覧ください。foo ディレクトリに、次の内容の
foo.go
ファイルを作成します。package foo const HelloWorld = "Hello World!"
モジュールをパッケージ化してアップロードする
モジュールをパッケージ化して、リポジトリにアップロードします。
gcloud artifacts go upload --project=PROJECT \ --repository=REPOSITORY \ --location=LOCATION \ --module-path=example.com/foo \ --version=VERSION \ --source=SOURCE_LOCATION
以下を置き換えます。
- PROJECT は、Google Cloud プロジェクト ID に置き換えます。
- REPOSITORY は、パッケージが保存されるリポジトリの名前に置き換えます。
- LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションに置き換えます。
example.com/foo
は、モジュールパスに置き換えます。詳細については、Go モジュールのリファレンスをご覧ください。- VERSION は、
vX.Y.Z
形式のモジュールのセマンティック バージョンに置き換えます。ここで、X
はメジャー バージョン、Y
はマイナー バージョン、Z
はパッチ バージョンです。 - SOURCE_LOCATION は、Go モジュールのルート ディレクトリへのパスに置き換えます。
--source
フラグを省略した場合のデフォルト値は現在のディレクトリです。
モジュールが Artifact Registry にアップロードされます。
Go モジュールの作成方法について詳しくは、こちらのチュートリアルをご覧ください。
モジュールを一覧表示する
デフォルト値が構成されているときに、次のコマンドを実行して、デフォルトのプロジェクト、リポジトリ、ロケーションにあるアップロードされた Go モジュールを検査します。
gcloud artifacts packages list
出力は次のようになります。
Listing items under project my-project, location us-west1, repository my-repo. PACKAGE CREATE_TIME UPDATE_TIME example.com/foo 2022-06-03T20:43:39 2022-06-20T20:37:40
モジュール バージョンの詳細を表示する
デフォルト値が構成されているときに、次のコマンドを実行して、デフォルトのプロジェクト、リポジトリ、ロケーションにあるモジュールのバージョンを表示します。
gcloud artifacts versions list --package=MODULE_PATH
出力は次のようになります。
Listing items under project my-project, location us-west1, repository my-repo, package example.com/foo. VERSION DESCRIPTION CREATE_TIME UPDATE_TIME v0.1.0 2022-06-03T20:43:39 2022-06-03T20:43:39 v0.1.1 2022-06-20T20:37:40 2022-06-20T20:37:40
モジュールをダウンロードする
Artifact Registry に格納されているモジュールをインポートするには、Go に Artifact Registry から依存関係を検索するよう指示し、チェックサム データベースをバイパスする必要があります。
Go 環境を設定する
Artifact Registry、公開 Go モジュール プロキシ、ソースを次の順序でダウンロードするように Go に指示します。
export GOPROXY=https://LOCATION-go.pkg.dev/PROJECT/REPOSITORY,https://proxy.golang.org,direct
以下を置き換えます。
公開チェックサム データベースを使用してモジュールがチェックされないように除外します。
export GONOSUMDB=MODULE_PATH_REGEX
複数のモジュールを除外する場合は、MODULE_PATH_REGEX をモジュールパスまたは正規表現に置き換えます。
公開チェックサム データベースを使用してモジュール
example.com/foo
がチェックされないようにするには、次のコマンドを実行します。export GONOSUMDB=example.com/foo
example.com
で始まるモジュールパスを持つすべてのモジュールが公開チェックサム データベースを使用したチェックから除外されるようにするには、次のコマンドを実行します。export GONOSUMDB=example.com/*
Artifact Registry に対して認証する
パッケージ化された Go モジュールをダウンロードして Artifact Registry から依存関係として使用すると、Go バイナリは netrc ファイル内の認証情報を使用して Artifact Registry に対する認証を行います。認証プロセスを簡素化するには、Go 認証ヘルパーを使用して、Artifact Registry への認証用の netrc ファイル内のトークンを更新します。
netrc ファイルの場所は、netrc 環境変数で設定できます。NETRC
変数が設定されていない場合、go
コマンドは UNIX に似たプラットフォームでは $HOME/.netrc
、Windows では %USERPROFILE%\_netrc
を読み取ります。
Artifact Registry では、次の認証方法がサポートされています。
- 有効期間が短い認証情報(推奨)
- Artifact Registry の Go 認証ヘルパーツールを使用して、netrc ファイル内の認証トークンを更新します。
- サービス アカウント キーを使用する
このオプションは、環境で認証に認証情報を使用できない場合に使用します。暗号化されていないサービス アカウントキーを netrc ファイルに追加します。
Go 認証ヘルパーを GONOPROXY
に追加する
Go 認証ヘルパーを使用する前に、これを Go が GitHub から直接ダウンロードするように、GONOPROXY
リストに追加する必要があります。ソースから直接ダウンロードしたい他のモジュールがある場合は、次の例のように、カンマ区切りのリストで追加できます。
export GONOPROXY=MODULE_PATH1, MODULE_PATH2
ここで、MODULE_PATH1 と MODULE_PATH2 は、ソースからダウンロードするモジュールのモジュールパスです。
Go 認証ヘルパーを GONOPROXY
リストに追加し、それを実行して認証情報を設定する手順は、次のとおりです。
Go 認証ヘルパーを
GONOPROXY
に追加するexport GONOPROXY=github.com/GoogleCloudPlatform/artifact-registry-go-tools
次のコマンドを実行して、Go モジュール パッケージ ツールで Artifact Registry の認証情報を netrc ファイルに追加します。
GOPROXY=proxy.golang.org \ go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0 \ add-locations --locations=LOCATION \ [--json_key=path/to/service/account/key.json]
ここで、LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。複数の場所を追加する場合は、カンマ区切りのリストとして入力します。
Go 認証ヘルパーは、Artifact Registry の認証用の設定を netrc ファイルに追加します。
--json_key
フラグを渡すと、キーが netrc ファイルに追加され、パスワード認証が行われます。
モジュールを依存関係として使用する
Artifact Registry の認証に有効期間の短い認証情報を使用している場合は、次のコマンドを実行して OAuth トークンを更新する必要があります。
GOPROXY=proxy.golang.org \ go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0 refresh
ホーム ディレクトリで、「bar」という名前のディレクトリを作成します。
mkdir bar
ディレクトリをモジュールのディレクトリに変更し、
go mod init
を実行してパッケージのgo.mod
ファイルを作成します。cd bar \ go mod init example.com/bar
example.com/bar
は、モジュールパスに置き換えます。詳細については、Go モジュールのリファレンスをご覧ください。Artifact Registry に格納されている foo のバージョンを要求するには、
go.mod
ファイルを次のように編集します。module example.com/bar go 1.19 require example.com/foo v0.1.0
以下を置き換えます。
example.com/foo
は、必要なモジュールのモジュールパスですv0.1.0
は Artifact Registry に保存されているバージョンです
bar
ディレクトリに、次の内容のmain.go
ファイルを作成します。package main import ( "fmt" foo "example.com/foo" ) func main() { fmt.Println(foo.HelloWorld) }
go mod tydy を実行して、foo パッケージを含む依存関係をダウンロードします。
go mod tidy
bar モジュールを実行します。
go run .
出力は次のようになります。
Hello World!
クリーンアップ
このページで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の手順を行います。
このページで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の手順を行います。リポジトリを削除する前に、保持する必要があるモジュールが別の場所で使用可能であることを確認してください。
リポジトリを削除するには、次の手順を行います。
gcloud artifacts repositories delete \ --location=LOCATION \ --project=PROJECT \ REPOSITORY
以下を置き換えます。
アクティブな gcloud 構成のデフォルトのリポジトリとロケーション設定を削除するには、次のコマンドを実行します。
gcloud config unset artifacts/repository gcloud config unset artifacts/location
次のステップ
- 認証の構成の詳細を確認する。
- リポジトリの管理について確認する。
- Go モジュールの管理について確認する。
- DevOps に関するリソースをご覧ください。また、DevOps Research and Assessment 研究プログラムについても確認してください。