1. ホーム
  2. go

[解決済み] Go モジュールのローカル リポジトリとして Artifactory を使用する方法

2022-01-28 19:04:13

質問

  • 私はArtifactoryをセットアップして動作させ、他のアーティファクト(RPMなど)を提供しています。
  • 公開・非公開のGoプログラムおよびライブラリのローカルコピーを持ちたい
    • バージョンの一貫性を確保するため
    • 公開リポジトリでバグ出しを行うため
    • 公開リポジトリを不正な改変から守るため
  • ArtifactoryにGoリポジトリを作成し、frog-cliを使用して、例としてspf13/viperを投入しました(zipファイルとmodファイルが作成されました)。

質問です。

  1. ZIP ファイルは、Artifactory に Go モジュールを保存する適切な方法ですか?
  2. Goプログラムの中でzipファイルをどのように使用するのですか?例えば、zip ファイルを取得するための URL は以下の通りです。 http://hostname/artifactory/reponame/github.com/spf13/viper/@v/v1.6.1.zip (MODファイルは.mod) 例えば、GOPATHに何らかの値を設定すればいいのでしょうか?
  3. すべての要件が自動的にローカルのArtifactoryリポジトリに含まれるようにする方法はありますか?プライマリパッケージ(例:viper)のローカルArtifactoryリポジトリへのインクルージョン時に?

解決方法は?

3番目の質問に答えるのが先

もう一つ、参考になる記事があります。 https://jfrog.com/blog/why-goproxy-matters-and-which-to-pick/ . プライベートなgoモジュールをArtifactoryに公開するには、2つの方法があります。1つは伝統的な方法、つまりJFrog CLIを使う方法です。 記事 .

もうひとつの方法は、リモートリポジトリを GitHub のプライベートリポジトリに指定することです。この機能は最近追加されました。この場合、仮想リポジトリはふたつのリモートを持つことになります。最初のリモートリポジトリのデフォルトは GoCenter を経由して、公開されているGoモジュールが取得されます。2番目のリモートリポジトリは、プライベートなVCSシステムを指します。

GOPROXY を仮想 Go モジュールリポジトリのみに設定すると、Artifactory がパブリックとプライベートの両方の Go モジュールの真実のソースであり続けることが保証されます。コンパイル済みの go バイナリを保存したい場合は、ローカルの汎用リポジトリを使用できますが、汎用リポジトリのコンテンツを構造化するためにカスタムレイアウトを使用することをお勧めします。

最初の2つの質問に答えます。

GoモジュールはGolangのパッケージマネージャで、Javaのmavenと同じようなものです。Artifactoryでは、すべてのgoモジュールに対して、go.mod、.info、アーカイブファイルの3つのファイルが存在します。

Artifactory は GOPROXY プロトコルに従っているので、go.mod に記述された依存関係は、自動的に仮想リポジトリから取得されます。これは、パッケージ(ソースファイル)のコレクションであるアーカイブファイルも含みます。

GoSumDB リクエストがキャッシュされるため、タイルやルックアップ リクエストなど、パブリック Go モジュール用に保存される追加のメタデータがあり、Artifactory がエアギャップ環境でもモジュールとメタデータの真実のソースであり続けることを保証しています。