GSP1076

總覽
Artifact Registry 由 Container Registry 演變而來,可讓組織在同一個位置管理容器映像檔和語言套件 (例如 Maven 和 npm)。這項服務與其他 Google Cloud 工具和執行階段完全整合,並支援原生構件通訊協定。因此您可輕鬆整合 CI/CD 工具,並設定自動化管道。
在本實驗室,您將學會如何使用 Artifact Registry 的部分功能。
目標
本實驗室的內容包括:
- 為容器和語言套件建立存放區
- 使用 Artifact Registry 管理容器映像檔
- 將 Artifact Registry 與 Cloud Code 整合
- 設定 Maven 來使用 Artifact Registry 取得 Java 依附元件
設定和需求
瞭解以下事項後,再點選「Start Lab」按鈕
請詳閱以下操作說明。實驗室活動會計時,且中途無法暫停。點選「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。
-
點選「下一步」。
-
複製下方的 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」圖示
。
-
系統顯示視窗時,請按照下列步驟操作:
- 繼續操作 Cloud Shell 視窗。
- 授權 Cloud Shell 使用您的憑證發出 Google Cloud API 呼叫。
連線建立完成即代表已通過驗證,而且專案已設為您的 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 總覽指南。
請務必等待實驗室佈建完成,再開始對環境進行變更。實驗室狀態顯示為準備就緒後,您就能使用預先設定的環境元件。
工作 1:準備實驗室環境
設定變數
- 在 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)')
export REGION={{{ project_0.default_region | "REGION" }}}
gcloud config set compute/region $REGION
啟用 Google 服務
gcloud services enable \
cloudresourcemanager.googleapis.com \
container.googleapis.com \
artifactregistry.googleapis.com \
containerregistry.googleapis.com \
containerscanning.googleapis.com
取得原始碼
本實驗室的原始碼位於 GitHub 的 GoogleCloudPlatform 組織。
git clone https://github.com/GoogleCloudPlatform/cloud-code-samples/
cd ~/cloud-code-samples
佈建本實驗室使用的基礎架構
在本實驗室,您會將程式碼部署至 Kubernetes Engine (GKE)。
gcloud container clusters create container-dev-cluster --zone={{{ project_0.default_zone | "ZONE" }}}
點選「Check my progress」確認目標已達成。
啟用 Google 服務並建立 GKE 叢集
工作 2:使用容器映像檔
在 Artifact Registry 建立 Docker 存放區
Artifact Registry 支援管理容器映像檔和語言套件。不同構件類型適用的規格不同,舉例來說,Maven 依附元件和 Node 依附元件的要求就不一樣。
為支援不同的 API 規格,Artifact Registry 需要知道您希望 API 回應採用哪種格式。為此,您需要建立存放區,並傳入 --repository-format 旗標,指出所需的存放區類型。
- 在 Cloud Shell 執行下列指令,為 Docker 映像檔建立存放區:
gcloud artifacts repositories create container-dev-repo --repository-format=docker \
--location=$REGION \
--description="Docker repository for Container Dev Workshop"
如果出現 Cloud Shell 授權提示,請點選「授權」。
- 前往 Cloud 控制台,依序點選「Artifact Registry」 >「存放區」,即可看到新建立的 Docker 存放區
container-dev-repo。點進去後,會發現存放區目前是空的。
點選「Check my progress」,確認目標已達成。驗證可能需要一分鐘。如果已順利完成,但尚未通過驗證,請稍待片刻再試一次。
使用容器映像檔
設定 Docker 對 Artifact Registry 的驗證機制
連線至 Artifact Registry 時,必須提供憑證才能授予存取權。Docker 可設定為直接使用 gcloud 憑證,不必另外設定憑證。
- 在 Cloud Shell 執行下列指令,將 Docker 設為使用 Google Cloud CLI,驗證對位在 區域的 Artifact Registry 傳送的要求:
gcloud auth configure-docker {{{ project_0.default_region | "Filled in at lab start" }}}-docker.pkg.dev
- 系統會提示您確認是否要變更 Cloud Shell Docker 設定,請點按 ENTER 鍵確認。
探索範例應用程式
您複製的 Git 存放區提供範例應用程式。
cd ~/cloud-code-samples/java/java-hello-world
這個資料夾包含一個範例 Java 應用程式,可呈現簡單的網頁。除了與本實驗室無關的各種檔案外,還包含 src 資料夾中的原始碼,以及您將用來在本機建構容器映像檔的 Dockerfile。
建構容器映像檔
如要將容器映像檔儲存至 Artifact Registry,必須先建立一個。
docker build -t {{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/{{{ project_0.project_id | "PROJECT_ID" }}}/container-dev-repo/java-hello-world:tag1 .
將容器映像檔推送至 Artifact Registry:
docker push {{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/{{{ project_0.project_id | "PROJECT_ID" }}}/container-dev-repo/java-hello-world:tag1
在 Artifact Registry 查看映像檔
-
前往「Artifact Registry」>「存放區」,點選「container-dev-repo」,確認已建立 java-hello-world 映像檔。
-
按一下映像檔,注意標有 tag1 的映像檔。您會看到安全漏洞掃描正在執行或已完成,以及偵測到的安全漏洞數量。

點按安全漏洞數量,即可查看映像檔中偵測到的安全漏洞清單,包括 CVE 公告名稱和嚴重程度。點按各項安全漏洞旁的「查看」,即可查看詳細資料:

工作 3:與 Cloud Code 整合
在本節中,您將搭配 Cloud Code 使用 Artifact Registry Docker 映像檔存放區。
透過 Cloud Code 將應用程式部署至 GKE 叢集
- 在
java-hello-world 資料夾執行下列指令,開啟 Cloud Shell 編輯器,並將應用程式資料夾新增至這個工作區:
cd ~/cloud-code-samples/
cloudshell workspace .
Cloud Shell 編輯器會隨即開啟,並在應用程式資料夾中顯示檔案總管。
- 在左選單中選取「Cloud Code」,然後展開「COMPUTE ENGINE」選項,點選「選取專案」並選擇實驗室說明提供的專案 ID。

接著,展開「KUBERNETES」選項,就會看到叢集正在載入。
請等到「KUBERNETES」和「COMPUTE ENGINE」都列出叢集後,再繼續操作。
- 在後續步驟中,您需要輸入 Artifact Registry 存放區位置,格式為:
{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/{{{ project_0.project_id | "PROJECT_ID" }}}/container-dev-repo
依序點按 Cloud Shell 編輯器導覽選單
>「View」>「Command Palette...」,然後輸入「Run on Kubernetes」,並選取「Cloud Code: Run on Kubernetes」。

-
依序選擇「cloud-code-samples/java/java-hello-world/skaffold.yaml」和「dockerfile」。
-
如果系統提示您選取結構定義,請選取「是」以使用目前的結構定義。
-
在選取映像檔存放去的提示視窗中,選取「Enter the address of an image repository」,然後輸入您使用的位址位置,並按下 Enter 鍵。

{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/{{{ project_0.project_id | "PROJECT_ID" }}}/container-dev-repo
- 第一次執行「Run on Kubernetes」時,Cloud Code 會提示您輸入目標映像檔存放區位置。提供位置後,系統會將網址儲存在應用程式資料夾中建立的
.vscode/launch.json 檔案。
在輸出窗格中,您會看到應用程式映像檔 java-hello-world 已開始建構,且映像檔已上傳至先前設定的 Artifact Registry 存放區。
- 依序前往「Artifact Registry」>「存放區」,點選「container-dev-repo」
,確認是否有 java-hello-world 映像檔,並記下含有 latest 標記的新映像檔。
查看已部署的應用程式
- 返回 Cloud Shell 編輯器。部署完成後,Skaffold/Cloud Code 會顯示服務轉送的公開網址,按一下「Follow link」連結:

新瀏覽器視窗會顯示 hello world 應用程式頁面。

更新應用程式程式碼
現在更新應用程式碼,即可在叢集部署作業立即看到變更生效:
-
依序點選 Cloud Shell 編輯器的「導覽選單」
>「View」>「Command Palette...」,然後按一下 Backspace 鍵,輸入路徑「src/main/java/cloudcode/helloworld/web」,再點選以 Hello.. 開頭的選項,即可開啟 HelloWorldController.java。
-
將第 20 列的文字從「It's running!」改為「It's updated!」,建構和部署程序就會立即開始。
-
部署完成後,再次點按轉送的網址,或重新整理應用程式的瀏覽器視窗,即可看到已部署的變更內容:

- 前往 Cloud 控制台,依序點按「導覽選單」>「Artifact Registry」>「存放區」,然後按一下
container-dev-repo,確認是否有 java-hello-world 映像檔,並記下新映像檔。
點選「Check my progress」確認目標已達成。
與 Cloud Code 整合
工作 4:使用語言套件
在本節中,您將設定 Artifact Registry Java 存放區並上傳套件,然後在不同應用程式中運用這些套件。
建立 Java 套件存放區
- 在 Cloud Shell 執行下列指令,為 Java 構件建立存放區:
gcloud artifacts repositories create container-dev-java-repo \
--repository-format=maven \
--location={{{ project_0.default_region | "REGION" }}} \
--description="Java package repository for Container Dev Workshop"
-
如果出現 Cloud Shell 授權提示,請點選「授權」。
-
前往 Cloud 控制台的「Artifact Registry」>「Repositories」,就會看到新建立的 Maven 存放區 container-dev-java-repo。點選後,會發現存放區目前是空的。
點選「Check my progress」確認目標已達成。
建立 Java 套件存放區
設定 Artifact Repository 的驗證機制
- 使用下列指令,以使用者帳戶憑證更新應用程式預設憑證 (ADC) 的已知位置,這樣 Artifact Registry 憑證輔助程式就能在連線至存放區時,使用這些憑證驗證:
gcloud auth login --update-adc
如果出現驗證提示訊息:
- 輸入「Y」。
- 將程式碼貼到瀏覽器視窗。
- 選取「Google 登入」,然後使用實驗室提供的憑證登入。
- 複製瀏覽器中的驗證碼並貼到控制台,完成驗證。
設定 Maven 以搭配 Artifact Registry 使用
- 執行下列指令,顯示要新增至 Java 專案的存放區設定:
gcloud artifacts print-settings mvn \
--repository=container-dev-java-repo \
--location={{{ project_0.default_region | "REGION" }}}
- 在 Cloud Shell 編輯器開啟
pom.xml,將傳回的設定新增至檔案中的對應區段:
- 新增 distributionManagement 區段。
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://{{{ project_0.default_region | "REGION" }}}-maven.pkg.dev/{{{ project_0.project_id | "PROJECT_ID" }}}/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://{{{ project_0.default_region | "REGION" }}}-maven.pkg.dev/{{{ project_0.project_id | "PROJECT_ID" }}}/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://{{{ project_0.default_region | "REGION" }}}-maven.pkg.dev/{{{ project_0.project_id | "PROJECT_ID" }}}/container-dev-java-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
- 更新「builds」區段的「extensions」。
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.1.0</version>
</extension>
</extensions>
您可以參考以下完整檔案的範例。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>hello-world</artifactId>
<packaging>jar</packaging>
<name>Cloud Code Hello World</name>
<description>Getting started with Cloud Code</description>
<version>1.0.0</version>
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://{{{ project_0.default_region | "REGION" }}}-maven.pkg.dev/{{{ project_0.project_id | "PROJECT_ID" }}}/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://{{{ project_0.default_region | "REGION" }}}-maven.pkg.dev/{{{ project_0.project_id | "PROJECT_ID" }}}/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://{{{ project_0.default_region | "REGION" }}}-maven.pkg.dev/{{{ project_0.project_id | "PROJECT_ID" }}}/container-dev-java-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.3</version>
</parent>
<properties>
<java.version>1.8</java.version>
<checkstyle.config.location>./checkstyle.xml</checkstyle.config.location>
</properties>
<build>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>3.2.0</version>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.1.2</version>
</plugin>
</plugins>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.1.0</version>
</extension>
</extensions>
</build>
<!-- The Spring Cloud GCP BOM will manage spring-cloud-gcp version numbers for you. -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-dependencies</artifactId>
<version>1.2.8.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-logging</artifactId>
</dependency>
</dependencies>
</project>
將 Java 套件上傳至 Artifact Registry
在 Maven 設定 Artifact Registry 後,即可使用 Artifact Registry 儲存 Java JAR,供貴機構的其他專案使用。
- 輸入下列指令,切換至
java-hello-world 資料夾。
cd ~/cloud-code-samples/java/java-hello-world
- 執行下列指令,將 Java 套件上傳至 Artifact Registry:
mvn deploy
在 Artifact Registry 檢查 Java 套件
前往 Cloud 控制台,依序點選「Artifact Registry」>「存放區」,然後點按「container-dev-java-repo」,確認 hello-world 二進位檔構件已存在:

恭喜!
您透過本實驗室學會了 Artifact Registry 的部分功能。首先,您為容器和語言套件建立了存放區,接著使用 Artifact Registry 管理容器映像檔,並與 Cloud Code 整合。最後,您透過設定 Maven,使用 Artifact Registry 處理 Java 依附元件。您現在已充分瞭解 Artifact Registry 的功能了!
Google Cloud 教育訓練與認證
協助您瞭解如何充分運用 Google Cloud 的技術。我們的課程會介紹專業技能和最佳做法,讓您可以快速掌握要領並持續進修。我們提供從基本到進階等級的訓練課程,並有隨選、線上和虛擬課程等選項,方便您抽空參加。認證可協助您驗證及證明自己在 Google Cloud 技術方面的技能和專業知識。
使用手冊上次更新日期:2024 年 5 月 9 日
實驗室上次測試日期:2024 年 5 月 9 日
Copyright 2026 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。