GSP1185

總覽
Artifact Registry 可讓您儲存不同類型的構件、在單一專案中建立多個存放區,並將特定區域或多個區域與每個存放區建立關聯。系統提供多種存放區模式,每種模式的用途各異。下圖展示了存放區多種應用方式之一,說明如何搭配使用不同模式的存放區,當中的工作流程橫跨兩個 Google Cloud 專案。在開發專案中,開發人員會建構 Java 應用程式。在另一個執行階段專案中,另一個建構作業會建立含有應用程式的容器映像檔,用於部署到 Google Kubernetes Engine。
在本實驗室中,您將瞭解如何執行下列工作:
- 使用標準存放區部署私人套件
- 使用遠端存放區快取 Maven Central 套件
- 使用虛擬存放區,將多個上游存放區合併到一個設定中
設定和需求
實驗室活動開跑須知
請詳閱以下操作說明。實驗室活動會計時,中途無法暫停。點選「Start Lab」後就會開始計時,顯示可使用 Google Cloud 資源的時間。
您將在真正雲端環境中完成實作,而不是在模擬或示範環境。因此,我們會提供新的臨時憑證,讓您在實驗室活動期間登入及存取 Google Cloud。
如要順利完成這個實驗室活動,請先確認:
- 可以使用標準的網路瀏覽器 (Chrome 瀏覽器為佳)。
注意:請使用無痕模式或私密瀏覽視窗執行本實驗室,防止個人帳戶和學生帳戶之間的衝突,避免個人帳戶產生額外費用。
- 該來完成實驗室活動了!別忘了,活動開始後就無法暫停。
注意:如果您擁有個人 Google Cloud 帳戶或專案,請勿用於本研究室,以免產生額外費用。
如何開始實驗室及登入 Google Cloud 控制台
-
按一下「Start Lab」按鈕。如果實驗室會產生費用,畫面中會出現選擇付款方式的彈出式視窗。左側的「Lab Details」窗格會顯示下列項目:
- 「Open Google Cloud console」按鈕
- 剩餘時間
- 必須在這個實驗室使用的臨時憑證
- 完成這個實驗室所需的其他資訊 (如有)
-
點選「Open Google Cloud console」;如果使用 Chrome 瀏覽器,也可以按一下滑鼠右鍵,選取「在無痕視窗中開啟連結」。
接著,實驗室會啟動相關資源並開啟另一個分頁,當中顯示「登入」頁面。
提示:您可以在不同的視窗中並排開啟分頁。
注意:頁面中顯示「選擇帳戶」對話方塊時,請點選「使用其他帳戶」。
-
如有必要,請將下方的 Username 貼到「登入」對話方塊。
{{{user_0.username | "Username"}}}
您也可以在「Lab Details」窗格找到 Username。
-
點按「Next」。
-
複製下方的 Password,並貼到「歡迎使用」對話方塊。
{{{user_0.password | "Password"}}}
您也可以在「Lab Details」窗格找到 Password。
-
點選「下一步」。
重要事項:請務必使用實驗室提供的憑證,而非自己的 Google Cloud 帳戶憑證。
注意:如果使用自己的 Google Cloud 帳戶來進行這個實驗室,可能會產生額外費用。
-
按過後續的所有頁面:
- 接受條款及細則。
- 由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
- 請勿申請免費試用。
Google Cloud 控制台稍後會在這個分頁開啟。
注意:如要查看列出 Google Cloud 產品和服務的選單,請點選左上角的「導覽選單」。
啟動 Cloud Shell
Cloud Shell 是搭載多項開發工具的虛擬機器,提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作。Cloud Shell 提供指令列存取權,方便您使用 Google Cloud 資源。
- 點按 Google Cloud 控制台頂端的「啟用 Cloud Shell」圖示
。
連線建立完成即代表通過驗證,而且專案已設為您的 Project_ID:。輸出內容中有一行文字,宣告本工作階段的 Project_ID:
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud 是 Google Cloud 的指令列工具,已預先安裝於 Cloud Shell,並支援 Tab 鍵自動完成功能。
- (選用) 您可以執行下列指令來列出使用中的帳戶:
gcloud auth list
- 點按「授權」。
輸出內容:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (選用) 您可以使用下列指令來列出專案 ID:
gcloud config list project
輸出內容:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注意:如需 gcloud 的完整說明,請前往 Google Cloud 參閱 gcloud CLI 總覽指南。
Workspace 設定
- 在 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)')
- 啟用 Artifact Registry API:
gcloud services enable artifactregistry.googleapis.com
- 複製本實驗室需要的存放區,然後前往
container-analysis 目錄:
git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/container-registry/container-analysis
工作 1:標準存放區
標準存放區可儲存私人套件,並在其他應用程式之間共用
- 執行下列指令,為 Java 構件建立標準 Maven 存放區:
gcloud artifacts repositories create container-dev-java-repo \
--repository-format=maven \
--location=us-central1 \
--description="Java package repository for Container Dev Workshop"
如果出現 Cloud Shell 授權提示,請點選「授權」。
-
前往 Cloud 控制台,依序點選「Artifact Registry」>「存放區」,即可看到新建立的 container-dev-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'
點選「Check my progress」,確認目標已達成。
建立標準 Maven 存放區
工作 2:設定 Maven 以搭配 Artifact Registry 使用
- 執行下列指令,顯示要新增至 Java 專案的存放區設定:
gcloud artifacts print-settings mvn \
--repository=container-dev-java-repo \
--location=us-central1
先前的指令會傳回要新增至專案 pom.xml 的 xml。
- 「repositories」區段會指定 Maven 可從何處下載遠端構件,供目前專案使用。
- 「distributionManagement」區段會指定專案部署時要推送至哪個遠端存放區。
- 「extensions」區段會新增 artifactregistry-maven-wagon,啟用連線至 Artifact Registry 所需的驗證和傳輸層
- 注意:擴充功能可放在 pom.xml 或 extensions.xml 中。如果專案依附於上層專案,系統會先存取這些依附元件,再載入 pom.xml 中的其餘項目。為確保上層能存取擴充功能,可以將擴充功能放在 extensions.xml 檔案中,這個檔案會在 pom.xml 之前載入,讓上層依附元件可以使用擴充功能。
- 在 Cloud Shell 中執行下列指令,在目前的目錄中開啟編輯器:
cloudshell workspace .
- 複製這三個區段,然後在 Cloud Shell 編輯器中開啟
pom.xml,將傳回的設定新增至檔案底部,也就是結尾 project 標記內。
範例如下 (網址中的專案名稱會有所不同):
...
<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>
在 Maven 設定 Artifact Registry 後,即可使用 Artifact Registry 儲存 Java JAR,供貴組織的其他專案使用。
- 執行下列指令,將 Java 套件上傳至 Artifact Registry:
mvn deploy -DskipTests
如要再次執行這項指令,請務必增加 pom.xml 中的版本號碼。
- 前往 Cloud 控制台,依序點選「Artifact Registry」>「存放區」,然後按一下
container-dev-java-repo,確認 hello-world 二進位檔構件已存在:
工作 3:遠端存放區
遠端存放區可快取第三方套件,提高可靠性和安全性。
- 執行下列指令,為 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,會發現這個存放區已建立,但目前是空的。
點選「Check my progress」,確認目標已達成。
建立遠端存放區
- 在終端機中查看存放區:
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 中新增「repository」區段。請勿從輸出內容複製外部 <repositories> 標記。
-
將新加入的存放區 ID 變更為「central」,確保每個存放區項目都有專屬 ID。
範例如下 (網址中的專案名稱會有所不同):
...
<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
- 執行下列指令,使用遠端存放區編譯應用程式:
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
點選「Check my progress」,確認目標已達成。
建立虛擬存放區
- 執行下列指令,顯示要新增至 Java 專案的存放區設定:
gcloud artifacts print-settings mvn \
--repository=virtual-maven-repo \
--location=us-central1
- 將 pom 中的整個「repositories」區段,替換為輸出內容中的「virtual repositories」區段。
範例如下 (網址中的專案名稱會有所不同):
...
<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>
從虛擬存放區提取依附元件
由於虛擬存放區是傳遞路徑,不會儲存任何實際套件,為了清楚示範程序,您將刪除先前建立的 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,確認二進位檔構件已設定為從虛擬存放區提取,但最終是從 maven-central-cache 提取。
恭喜!
您已學會如何使用多種存放區模式,並瞭解這些存放區的各種用途。
後續步驟/瞭解詳情
Google Cloud 教育訓練與認證
協助您瞭解如何充分運用 Google Cloud 的技術。我們的課程會介紹專業技能和最佳做法,讓您快速掌握要領並持續進修。訓練課程涵蓋基本到進階等級,您可自行安排時間,選擇以隨選、線上或虛擬方式參加。認證可協助您驗證及證明自己在 Google Cloud 技術方面的技能和專業知識。
使用手冊上次更新日期:2024 年 9 月 10 日
實驗室上次測試日期:2023 年 12 月 6 日
Copyright 2024 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,所有其他公司和產品名稱可能是其關聯公司的商標。