1. Tổng quan
Artifact Registry cho phép bạn lưu trữ nhiều loại cấu phần phần mềm, tạo nhiều kho lưu trữ trong một dự án và liên kết một khu vực cụ thể hoặc nhiều khu vực với từng kho lưu trữ. Có một số chế độ kho lưu trữ. Mỗi chế độ phục vụ một mục đích riêng. Sơ đồ sau đây cho thấy một trong nhiều cách có thể để bạn sử dụng các kho lưu trữ ở nhiều chế độ cùng nhau. Sơ đồ này cho thấy một quy trình làm việc trên 2 dự án Google Cloud. Trong một dự án phát triển, các lập trình viên sẽ tạo một ứng dụng Java. Trong một dự án thời gian chạy riêng biệt, một bản dựng khác sẽ tạo ra một hình ảnh vùng chứa có ứng dụng để triển khai vào Google Kubernetes Engine.

Trong phòng thí nghiệm này, bạn sẽ tìm hiểu cách thực hiện các thao tác sau.
- Sử dụng Kho lưu trữ tiêu chuẩn để triển khai các gói riêng tư
- Sử dụng Kho lưu trữ từ xa để lưu vào bộ nhớ đệm các gói Maven Central
- Sử dụng Kho lưu trữ ảo để kết hợp nhiều kho lưu trữ nguồn trong một cấu hình
Thiết lập môi trường theo tốc độ của riêng bạn
- Đăng nhập vào Google Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.



- Tên dự án là tên hiển thị của những người tham gia dự án này. Đây là một chuỗi ký tự mà các API của Google không sử dụng. Bạn có thể cập nhật thông tin này bất cứ lúc nào.
- Mã dự án là mã duy nhất trên tất cả các dự án trên Google Cloud và không thể thay đổi (bạn không thể thay đổi mã này sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường thì bạn không cần quan tâm đến chuỗi này. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (thường được xác định là
PROJECT_ID). Nếu không thích mã nhận dạng được tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Hoặc bạn có thể thử tên người dùng của riêng mình để xem tên đó có dùng được hay không. Bạn không thể thay đổi thông tin này sau bước này và thông tin này sẽ giữ nguyên trong suốt thời gian diễn ra dự án. - Để bạn biết, có một giá trị thứ ba là Số dự án mà một số API sử dụng. Tìm hiểu thêm về cả 3 giá trị này trong tài liệu.
- Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên/API trên Cloud. Việc thực hiện lớp học lập trình này sẽ không tốn nhiều chi phí, nếu có. Để tắt các tài nguyên nhằm tránh phát sinh phí thanh toán ngoài hướng dẫn này, bạn có thể xoá các tài nguyên đã tạo hoặc xoá toàn bộ dự án. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí trị giá 300 USD.
Thiết lập Workspace
Thiết lập gcloud
Trong Cloud Shell, hãy đặt mã dự án và số dự án. Lưu các giá trị này dưới dạng biến PROJECT_ID và PROJECT_NUMBER.
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
Bật API
gcloud services enable artifactregistry.googleapis.com
Nhân bản kho lưu trữ
git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/container-registry/container-analysis
2. Kho lưu trữ tiêu chuẩn
Kho lưu trữ tiêu chuẩn cung cấp một cách để lưu trữ các gói riêng tư và chia sẻ chúng trên các ứng dụng khác của bạn
Tạo kho lưu trữ maven tiêu chuẩn
Từ Cloud Shell, hãy chạy lệnh sau để tạo một kho lưu trữ cho các cấu phần phần mềm Java:
gcloud artifacts repositories create container-dev-java-repo \
--repository-format=maven \
--location=us-central1 \
--description="Java package repository for Container Dev Workshop"
Nhấp vào Uỷ quyền nếu lời nhắc uỷ quyền Cloud Shell xuất hiện
Truy cập vào Google Cloud Console – Artifact Registry – Kho lưu trữ và lưu ý đến kho lưu trữ Maven mới tạo có tên là container-dev-java-repo. Nếu nhấp vào kho lưu trữ này, bạn có thể thấy rằng kho lưu trữ này hiện đang trống.
gcloud artifacts repositories describe container-dev-java-repo \
--location=us-central1
Sẽ trả về một phản hồi tương tự như sau
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'
Định cấu hình Maven cho Artifact Registry
Chạy lệnh sau để in cấu hình kho lưu trữ cần thêm vào dự án Java của bạn:
gcloud artifacts print-settings mvn \
--repository=container-dev-java-repo \
--location=us-central1
Lệnh trước đó trả về xml sẽ được thêm vào pom.xml của dự án.
- Phần repositories chỉ định vị trí mà Maven có thể tải các cấu phần phần mềm từ xa xuống để dự án hiện tại sử dụng.
- Phần distributionManagement chỉ định kho lưu trữ từ xa mà dự án sẽ đẩy đến khi được triển khai.
- Phần extensions sẽ thêm artifactregistry-maven-wagon. Đây là lớp Xác thực và truyền tải cần thiết để kết nối với Artifact Registry
- Lưu ý: Các tiện ích có thể nằm trong pom.xml hoặc extensions.xml. Trong trường hợp dự án phụ thuộc vào một dự án mẹ, các phần phụ thuộc đó sẽ được truy cập trước khi các mục còn lại trong pom.xml được tải. Để đảm bảo rằng thư viện mẹ có quyền truy cập vào tiện ích này, bạn có thể đặt tiện ích trong tệp extensions.xml được tải trước pom.xml, nhờ đó, tiện ích này sẽ có sẵn cho các phần phụ thuộc của thư viện mẹ.
Sao chép 3 phần rồi mở pom.xml trong Cloud Shell Editor và thêm các chế độ cài đặt đã trả về vào cuối tệp ngay bên trong thẻ đóng project.
Lưu ý: Trong Cloud Shell, hãy chạy lệnh sau trong cửa sổ dòng lệnh để mở trình chỉnh sửa trong thư mục hiện tại.
cloudshell workspace .
Ví dụ: (tên dự án của bạn sẽ khác trong 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>
Tải gói Java lên Artifact Registry
Khi Artifact Registry được định cấu hình trong Maven, bạn có thể dùng Artifact Registry để lưu trữ các tệp jar Java cho các dự án khác trong tổ chức của mình.
Chạy lệnh sau để tải gói Java lên Artifact Registry:
mvn deploy -DskipTests
Nếu bạn muốn chạy lại lệnh này, hãy nhớ tăng phiên bản trong pom.xml.
Kiểm tra gói Java trong Artifact Registry
Chuyển đến bảng điều khiển Cloud – Artifact Registry – Kho lưu trữ Nhấp vào container-dev-java-repo rồi kiểm tra để đảm bảo rằng cấu phần phần mềm nhị phân hello-world có ở đó:

3. Kho lưu trữ từ xa
Kho lưu trữ từ xa cung cấp khả năng lưu vào bộ nhớ đệm các gói của bên thứ ba để tăng độ tin cậy và tính bảo mật.
Tạo kho lưu trữ từ xa
Lưu ý: Để biết thông tin chi tiết về việc xác thực và định cấu hình, hãy xem tài liệu về sản phẩm.
Từ Cloud Shell, hãy chạy lệnh sau để tạo một kho lưu trữ từ xa cho các cấu phần phần mềm 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
Xem lại kho lưu trữ trong bảng điều khiển
Chuyển đến Cloud Console – Artifact Registry – Repositories (Cloud Console – Artifact Registry – Kho lưu trữ). Nhấp vào maven-central-cache và lưu ý rằng kho lưu trữ này đã được tạo và hiện đang trống
Xem lại kho lưu trữ trong thiết bị đầu cuối
gcloud artifacts repositories describe maven-central-cache \
--location=us-central1
Tích hợp kho lưu trữ vào dự án của bạn
Chạy lệnh sau để in cấu hình kho lưu trữ cần thêm vào dự án Java của bạn:
gcloud artifacts print-settings mvn \
--repository=maven-central-cache \
--location=us-central1
Thêm phần kho lưu trữ vào pom.xml. Đừng sao chép thẻ <repositories> bên ngoài từ đầu ra.
Thay đổi mã nhận dạng của kho lưu trữ mới được thêm thành "central" để đảm bảo mỗi mục nhập kho lưu trữ đều có một mã nhận dạng duy nhất.
Ví dụ: (tên dự án của bạn sẽ khác trong 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>
Chạy các lệnh sau trong thiết bị đầu cuối để tạo extensions.xml cho dự án của bạn. Để sử dụng cơ chế tiện ích cốt lõi, hãy đảm bảo Maven có thể phân giải các phần phụ thuộc của trình bổ trợ hoặc phần tử mẹ từ 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
Kéo các phần phụ thuộc từ Kho lưu trữ từ xa
Chạy lệnh sau để biên dịch ứng dụng bằng Kho lưu trữ từ xa:
rm -rf ~/.m2/repository
mvn compile
Xem xét các gói trong bảng điều khiển
Chuyển đến bảng điều khiển Cloud – Artifact Registry – Repositories Nhấp vào maven-central-cache rồi kiểm tra để đảm bảo các cấu phần phần mềm nhị phân được lưu vào bộ nhớ đệm tại đó:

4. Kho lưu trữ ảo
Kho lưu trữ ảo đóng vai trò là giao diện để truy cập vào nhiều kho lưu trữ thông qua một cấu hình duy nhất. Điều này giúp đơn giản hoá cấu hình máy khách cho người dùng các cấu phần phần mềm của bạn và tăng cường bảo mật bằng cách giảm thiểu các cuộc tấn công nhầm lẫn về phần phụ thuộc.
Tạo tệp chính sách
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
Tạo kho lưu trữ ảo
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
Tích hợp kho lưu trữ vào dự án của bạn
Chạy lệnh sau để in cấu hình kho lưu trữ cần thêm vào dự án Java của bạn:
gcloud artifacts print-settings mvn \
--repository=virtual-maven-repo \
--location=us-central1
Thay thế toàn bộ phần kho lưu trữ trong pom bằng một phần kho lưu trữ ảo trong đầu ra.
Ví dụ: (tên dự án của bạn sẽ khác trong 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>
Kéo các phần phụ thuộc từ Kho lưu trữ ảo
Vì kho lưu trữ ảo là một kho lưu trữ truyền qua và sẽ không lưu trữ bất kỳ gói thực tế nào, nên để minh hoạ rõ ràng quy trình này, bạn sẽ xoá kho lưu trữ maven-central-cache mà bạn đã tạo trước đó và tạo lại kho lưu trữ đó để bắt đầu lại với một kho lưu trữ trống
Chạy các lệnh sau để tạo lại kho lưu trữ bộ nhớ đệm
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
Bạn có thể xem lại kho lưu trữ trống trong bảng điều khiển. Chuyển đến Cloud Console – Artifact Registry – Repositories (Cloud Console – Artifact Registry – Kho lưu trữ)
Giờ đây, hãy thực hiện kho lưu trữ ảo bằng cách tạo dự án bằng lệnh sau
rm -rf ~/.m2/repository
mvn compile
Xem xét các gói trong bảng điều khiển
Truy cập vào bảng điều khiển Cloud – Artifact Registry – Kho lưu trữ. Nhấp vào maven-central-cache rồi kiểm tra để đảm bảo rằng các cấu phần phần mềm nhị phân được định cấu hình để kéo từ kho lưu trữ ảo nhưng cuối cùng lại được kéo từ maven-central-cache:

5. Xin chúc mừng!
Xin chúc mừng, bạn đã hoàn tất lớp học lập trình này!
Nội dung bạn đã đề cập
- Sử dụng Kho lưu trữ tiêu chuẩn để triển khai các gói riêng tư
- Sử dụng Kho lưu trữ từ xa để lưu vào bộ nhớ đệm các gói trung tâm maven
- Sử dụng Kho lưu trữ ảo để kết hợp nhiều kho lưu trữ nguồn trong một cấu hình
Dọn dẹp
Chạy lệnh sau để xoá dự án
gcloud projects delete ${PROJECT_ID}
—
Lần cập nhật gần đây nhất: 22/3/2023