1. 概要
Artifact Registry を使用すると、さまざまなアーティファクト タイプを格納し、単一のプロジェクトに複数のリポジトリを作成し、各リポジトリに特定のリージョンやマルチリージョンを関連付けることができます。リポジトリのモードは複数あります。各モードはそれぞれ異なる目的で使用されます。次の図は、さまざまなモードのリポジトリを一緒に使用する方法の 1 つを示しています。図には、2 つの Google Cloud プロジェクトにまたがるワークフローを示しています。開発プロジェクトでは、デベロッパーが Java アプリケーションを構築します。別のランタイム プロジェクトでは、別のビルドによりアプリケーションを含むコンテナ イメージを作成し、Google Kubernetes Engine にデプロイします。
このラボでは、次のタスクの実行方法について学習します。
- 標準リポジトリを使用して限定公開パッケージをデプロイする
- リモート リポジトリを使用して Maven Central パッケージをキャッシュに保存する
- 仮想リポジトリを使用して複数のアップストリーム リポジトリを 1 つの構成に結合する
セルフペース型の環境設定
- Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。
- プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。この場所はいつでも更新できます。
- プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常は、この内容を意識する必要はありません。ほとんどの Codelab では、プロジェクト ID(通常は
PROJECT_ID
と識別されます)を参照する必要があります。生成された ID が好みではない場合は、ランダムに別の ID を生成できます。または、ご自身で試して、利用可能かどうかを確認することもできます。このステップ以降は変更できず、プロジェクトを通して同じ ID になります。 - なお、3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
- 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に請求が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクト全体を削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。
ワークスペースのセットアップ
gcloud を設定する
Cloud Shell で、プロジェクト ID とプロジェクト番号を設定します。これらの情報は、PROJECT_ID
変数と PROJECT_NUMBER
変数として保存します。
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
API を有効にする
gcloud services enable artifactregistry.googleapis.com
リポジトリのクローンを作成する
git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/container-registry/container-analysis
2. 標準リポジトリ
標準リポジトリを使用すると、限定公開パッケージを保存し、他のアプリ間で共有できます。
標準の Maven リポジトリを作成する
Cloud Shell で次のコマンドを実行して、Java アーティファクトのリポジトリを作成します。
gcloud artifacts repositories create container-dev-java-repo \
--repository-format=maven \
--location=us-central1 \
--description="Java package repository for Container Dev Workshop"
Cloud Shell の承認プロンプトが表示されたら、[承認] をクリックします。
Google Cloud コンソール - Artifact Registry - リポジトリに移動し、container-dev-java-repo
という名前の新しい Maven リポジトリを確認します。クリックすると、現在は空であることがわかります。
gcloud artifacts repositories describe container-dev-java-repo \
--location=us-central1
次のようなレスポンスが返されます。
Encryption: Google-managed key Repository Size: 0.000MB createTime: '2023-03-21T19:01:45.461589Z' description: Java package repository for Container Dev Workshop format: MAVEN mavenConfig: {} mode: STANDARD_REPOSITORY name: projects/qwiklabs-gcp-03-4304110dc461/locations/us-central1/repositories/container-dev-java-repo updateTime: '2023-03-21T19:01:45.461589Z'
Artifact Registry 用に Maven を構成する
次のコマンドを実行して、Java プロジェクトに追加するリポジトリ構成を出力します。
gcloud artifacts print-settings mvn \
--repository=container-dev-java-repo \
--location=us-central1
上記のコマンドは、プロジェクトの pom.xml に追加する xml を返します。
- [repositories] セクションでは、Maven が現在のプロジェクトで使用するためにリモート アーティファクトをダウンロードする場所を指定します。
- distributionManagement セクションでは、デプロイ時にプロジェクトが push するリモート リポジトリを指定します。
- extensions セクションに artifactregistry-maven-wagon を追加します。これにより、Artifact Registry への接続に必要な認証とトランスポート レイヤが有効になります。
- 注: 拡張機能は pom.xml または extensions.xml に存在できます。プロジェクトが親プロジェクトに依存している場合、pom.xml の残りのエントリが読み込まれる前に、それらの依存関係にアクセスされます。親が拡張機能にアクセスできるようにするには、extensions.xml ファイルに配置します。このファイルは pom.xml の前に読み込まれるため、親の依存関係で使用できます。
3 つのセクションをコピーし、Cloud Shell エディタで pom.xml
を開き、返された設定をファイルの下部にある閉じ project
タグのすぐ内側に追加します。
ヒント: Cloud Shell でターミナルで次のコマンドを実行すると、現在のディレクトリでエディタが開きます。
cloudshell workspace .
例:(URL のプロジェクト名は異なります)
...
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
</build>
</project>
Java パッケージを Artifact Registry にアップロードする
Maven で Artifact Registry を構成したので、Artifact Registry を使用して Java の jar を保存し、組織内の他のプロジェクトで使用できるようになりました。
次のコマンドを実行して、Java パッケージを Artifact Registry にアップロードします。
mvn deploy -DskipTests
このコマンドを再度実行する場合は、pom.xml のバージョンを必ず上げてください。
Artifact Registry で Java パッケージを確認する
Cloud コンソール - Artifact Registry - リポジトリに移動し、container-dev-java-repo
をクリックして、hello-world
バイナリ アーティファクトが存在することを確認します。
3. リモート リポジトリ
リモート リポジトリを使用すると、サードパーティ パッケージをキャッシュに保存して信頼性とセキュリティを強化できます。
リモート リポジトリを作成する
注: 認証と構成の詳細については、プロダクトのドキュメントをご覧ください。
Cloud Shell で次のコマンドを実行して、Maven Central アーティファクトのリモート リポジトリを作成します。
gcloud artifacts repositories create maven-central-cache \
--project=$PROJECT_ID \
--repository-format=maven \
--location=us-central1 \
--description="Remote repository for Maven Central caching" \
--mode=remote-repository \
--remote-repo-config-desc="Maven Central" \
--remote-mvn-repo=MAVEN-CENTRAL
コンソールでリポジトリを確認する
Cloud コンソール - Artifact Registry - リポジトリに移動します。maven-central-cache
をクリックして、作成され、現在空であることを確認します。
ターミナルでリポジトリを確認する
gcloud artifacts repositories describe maven-central-cache \
--location=us-central1
リポジトリをプロジェクトに統合する
次のコマンドを実行して、Java プロジェクトに追加するリポジトリ構成を出力します。
gcloud artifacts print-settings mvn \
--repository=maven-central-cache \
--location=us-central1
pom.xml にリポジトリ セクションを追加します。出力から外側の <repositories> タグをコピーしないようにしてください。
新しく追加したリポジトリの ID を「central」に変更して、各リポジトリ エントリに一意の ID が付与されるようにします。
例:(URL のプロジェクト名は異なります)
...
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>central</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/maven-central-cache</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
</build>
</project>
ターミナルで次のコマンドを実行してプロジェクトの extensions.xml
を作成します。コア拡張機能メカニズムを使用して、Maven が Artifact Registry から親またはプラグインの依存関係を解決できるようにします。
mkdir .mvn
cat > .mvn/extensions.xml << EOF
<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd">
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
EOF
リモート リポジトリから依存関係を pull する
次のコマンドを実行して、リモート リポジトリを使用してアプリケーションをコンパイルします。
rm -rf ~/.m2/repository
mvn compile
コンソールでパッケージを確認する
Cloud コンソール - Artifact Registry - リポジトリに移動し、maven-central-cache
をクリックして、バイナリ アーティファクトがキャッシュに保存されていることを確認します。
4. 仮想リポジトリ
仮想リポジトリは、単一の構成を介して複数のリポジトリにアクセスするためのインターフェースとして機能します。これにより、アーティファクトのコンシューマに対するクライアント構成が簡素化され、依存関係の混乱攻撃を軽減することでセキュリティが強化されます。
ポリシー ファイルを作成する
cat > ./policy.json << EOF
[
{
"id": "private",
"repository": "projects/${PROJECT_ID}/locations/us-central1/repositories/container-dev-java-repo",
"priority": 100
},
{
"id": "central",
"repository": "projects/${PROJECT_ID}/locations/us-central1/repositories/maven-central-cache",
"priority": 80
}
]
EOF
仮想リポジトリを作成する
gcloud artifacts repositories create virtual-maven-repo \
--project=${PROJECT_ID} \
--repository-format=maven \
--mode=virtual-repository \
--location=us-central1 \
--description="Virtual Maven Repo" \
--upstream-policy-file=./policy.json
リポジトリをプロジェクトに統合する
次のコマンドを実行して、Java プロジェクトに追加するリポジトリ構成を出力します。
gcloud artifacts print-settings mvn \
--repository=virtual-maven-repo \
--location=us-central1
pom の repositories セクション全体を、出力から取得した 1 つの仮想リポジトリ セクションに置き換えます。
例:(URL のプロジェクト名は異なります)
...
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/virtual-maven-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
</build>
</project>
仮想リポジトリから依存関係を pull する
仮想リポジトリはパススルーであり、実際のパッケージは保存されないため、プロセスを明確に示すために、前に作成した maven-central-cache リポジトリを削除して再作成し、空のリポジトリからやり直します。
次のコマンドを実行して、キャッシュ リポジトリを再作成します。
gcloud artifacts repositories delete maven-central-cache \
--project=$PROJECT_ID \
--location=us-central1 \
--quiet
gcloud artifacts repositories create maven-central-cache \
--project=$PROJECT_ID \
--repository-format=maven \
--location=us-central1 \
--description="Remote repository for Maven Central caching" \
--mode=remote-repository \
--remote-repo-config-desc="Maven Central" \
--remote-mvn-repo=MAVEN-CENTRAL
空のリポジトリはコンソールで確認できます。Cloud コンソール - Artifact Registry - リポジトリに移動します。
次のコマンドを使用してプロジェクトをビルドし、仮想リポジトリをテストします。
rm -rf ~/.m2/repository
mvn compile
コンソールでパッケージを確認する
Cloud コンソール - Artifact Registry - リポジトリに移動し、maven-central-cache
をクリックして、バイナリ アーティファクトが仮想リポジトリから pull するように構成されているが、最終的には maven-central-cache
から pull されたことを確認します。
5. 完了
お疲れさまでした。これでこの Codelab は終了です。
学習した内容
- プライベート パッケージのデプロイに標準リポジトリを使用した
- リモート リポジトリを使用して Maven Central パッケージをキャッシュに保存する
- 仮想リポジトリを使用して、複数のアップストリーム リポジトリを 1 つの構成に統合
クリーンアップ
次のコマンドを実行してプロジェクトを削除します。
gcloud projects delete ${PROJECT_ID}
—
最終更新日: 2023 年 3 月 22 日