Quản lý phần phụ thuộc bằng Artifact Registry

1. Tổng quan

Là một phiên bản nâng cấp của Container Registry, Artifact Registry là một nơi duy nhất để tổ chức của bạn quản lý các gói ngôn ngữ và hình ảnh vùng chứa (chẳng hạn như Maven và npm). Nền tảng này được tích hợp đầy đủ với các công cụ và thời gian chạy của Google Cloud, đồng thời hỗ trợ tính năng quản lý phần phụ thuộc dựa trên ngôn ngữ để sử dụng với các công cụ như npm và Maven. Điều này giúp bạn dễ dàng tích hợp với công cụ CI/CD để thiết lập quy trình tự động.

Phòng thí nghiệm này sẽ hướng dẫn bạn một số tính năng có trong Artifact Registry.

Kiến thức bạn sẽ học được

Mục tiêu học tập của phòng thực hành này là gì?

  • Tạo kho lưu trữ cho vùng chứa và gói ngôn ngữ
  • Quản lý hình ảnh vùng chứa bằng Artifact Registry
  • Định cấu hình Maven để sử dụng Artifact Registry cho các phần phụ thuộc Java

2. Thiết lập và yêu cầu

Thiết lập môi trường theo tốc độ của riêng bạn

  1. Đă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.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 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.
  1. 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 đám mây. 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 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_IDPROJECT_NUMBER.

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')

Bật các dịch vụ của Google

gcloud services enable \
  cloudresourcemanager.googleapis.com \
  container.googleapis.com \
  artifactregistry.googleapis.com \
  containerregistry.googleapis.com \
  containerscanning.googleapis.com

Lấy mã nguồn

Mã nguồn cho phòng thí nghiệm này nằm trong tổ chức GoogleCloudPlatform trên GitHub. Sao chép bằng lệnh bên dưới, sau đó thay đổi thành thư mục.

git clone https://github.com/GoogleCloudPlatform/cloud-code-samples/

3. Làm việc với hình ảnh vùng chứa

Tạo kho lưu trữ Docker trên Artifact Registry

Artifact Registry hỗ trợ việc quản lý hình ảnh vùng chứa và gói ngôn ngữ. Mỗi loại cấu phần phần mềm yêu cầu một quy cách riêng. Ví dụ: các yêu cầu đối với phần phụ thuộc Maven khác với các yêu cầu đối với phần phụ thuộc Node.

Để hỗ trợ các quy cách API khác nhau, Artifact Registry cần biết định dạng mà bạn muốn các phản hồi API tuân theo. Để làm việc này, bạn sẽ tạo một kho lưu trữ và truyền vào cờ --repository-format cho biết loại kho lưu trữ mong muốn

Từ Cloud Shell, hãy chạy lệnh sau để tạo một kho lưu trữ cho các hình ảnh Docker:

gcloud artifacts repositories create container-dev-repo --repository-format=docker \
--location=us-central1 --description="Docker 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 – Repositories (Artifact Registry – Kho lưu trữ) và xem kho lưu trữ Docker mới tạo có tên là container-dev-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

Định cấu hình quy trình xác thực Docker cho Artifact Registry

Khi kết nối với Artifact Registry, bạn phải cung cấp thông tin đăng nhập để cấp quyền truy cập. Thay vì thiết lập thông tin đăng nhập riêng biệt, bạn có thể định cấu hình Docker để sử dụng thông tin đăng nhập gcloud một cách liền mạch.

Từ Cloud Shell, hãy chạy lệnh sau để định cấu hình Docker sử dụng Google Cloud CLI nhằm xác thực các yêu cầu đối với Artifact Registry ở khu vực us-central1,

gcloud auth configure-docker us-central1-docker.pkg.dev

Lệnh này sẽ nhắc bạn xác nhận thay đổi cấu hình docker Cloud Shell, hãy nhấn phím Enter.

Khám phá Ứng dụng mẫu

Một ứng dụng mẫu được cung cấp trong kho lưu trữ git mà bạn đã sao chép ở bước trước. Chuyển sang thư mục java và xem lại mã xử lý ứng dụng.

cd cloud-code-samples/java/java-hello-world

Thư mục này chứa một ứng dụng Java mẫu hiển thị một trang web đơn giản: ngoài nhiều tệp không liên quan đến phòng thí nghiệm cụ thể này, thư mục này còn chứa mã nguồn trong thư mục src và một Dockerfile mà chúng ta sẽ dùng để tạo một hình ảnh vùng chứa cục bộ.

Tạo hình ảnh vùng chứa

Trước khi có thể lưu trữ hình ảnh vùng chứa trong Artifact Registry, bạn cần tạo một hình ảnh.

Chạy lệnh sau để tạo hình ảnh vùng chứa và gắn thẻ đúng cách để đẩy hình ảnh đó vào kho lưu trữ của bạn ở bước tiếp theo:

docker build -t us-central1-docker.pkg.dev/$PROJECT_ID/container-dev-repo/java-hello-world:tag1 .

Đẩy Hình ảnh vùng chứa vào Artifact Registry

Chạy lệnh sau để chuyển hình ảnh vùng chứa đến kho lưu trữ đã tạo trước đó:

docker push us-central1-docker.pkg.dev/$PROJECT_ID/container-dev-repo/java-hello-world:tag1

Xem lại hình ảnh trong Artifact Registry

Truy cập vào Google Cloud Console – Artifact Registry – Repositories (Google Cloud Console – Artifact Registry – Kho lưu trữ) . Nhấp vào container-dev-repo rồi kiểm tra để đảm bảo rằng hình ảnh java-hello-world có ở đó. Nhấp vào hình ảnh và lưu ý hình ảnh được gắn thẻ tag1. Bạn có thể thấy rằng tính năng Quét lỗ hổng đang chạy hoặc đã hoàn tất và số lượng lỗ hổng được phát hiện.

9cb46d3689b3ed2.png

Nhấp vào số lượng lỗ hổng bảo mật để xem danh sách các lỗ hổng bảo mật được phát hiện trong hình ảnh, cùng với tên bản tin CVE và mức độ nghiêm trọng. Bạn có thể nhấp vào XEM trên từng lỗ hổng bảo mật trong danh sách để biết thêm thông tin chi tiết:

c2a961e6218d5a45.png

4. Làm việc với các gói ngôn ngữ

Trong phần này, bạn sẽ thấy cách thiết lập một kho lưu trữ Java Artifact Registry và tải các gói lên kho lưu trữ đó, tận dụng các gói này trong nhiều ứng dụng.

Tạo một kho lưu trữ gói Java

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 – Repositories (Kho lưu trữ cấu phần phần mềm – 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.

Thiết lập chế độ xác thực cho Kho lưu trữ Artifact

Sử dụng lệnh sau để cập nhật vị trí đã biết cho Thông tin xác thực mặc định của ứng dụng (ADC) bằng thông tin đăng nhập tài khoản người dùng của bạn để trình trợ giúp thông tin đăng nhập Artifact Registry có thể xác thực bằng thông tin đăng nhập đó khi kết nối với các kho lưu trữ:

gcloud auth login --update-adc

Định cấu hình Maven cho Artifact Registry

Chạy lệnh sau đây từ thư mục java-hello-world để mở Cloud Shell Editor và thêm thư mục ứng dụng vào không gian làm việc của bạn:

cloudshell workspace .

Bật cookie của bên thứ ba bằng cách nhấp vào "Trang web hiện có hoạt động không?" rồi nhấp vào "Cho phép cookie".

Sau khi trình duyệt tải lại, hãy mở Cloud Shell và chạy lại lệnh ở trên một lần nữa để tải thư mục ứng dụng.

62328383ea59b30c.png

a9d756bf08575b0d.png

Mở pom.xml trong Cloud Shell Editor, nhấp vào "Open Editor" (Mở trình chỉnh sửa)

95d98e831787b2ff.png

Mở cửa sổ dòng lệnh trong Cloud Shell Editor rồi 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

và thêm các chế độ cài đặt được trả về vào các phần thích hợp trong tệp pom.xml.

Chế độ xem Cloud Editor có cửa sổ dòng lệnh tích hợp:

33c3bfa412b7babd.png

Cập nhật phần distributionManagement

<distributionManagement>
   <snapshotRepository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
   </snapshotRepository>
   <repository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
   </repository>
</distributionManagement>

Cập nhật phần kho lưu trữ

 <repositories>
   <repository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
     <releases>
       <enabled>true</enabled>
     </releases>
     <snapshots>
       <enabled>true</enabled>
     </snapshots>
   </repository>
 </repositories>

Cập nhật tiện ích

<extensions>
     <extension>
       <groupId>com.google.cloud.artifactregistry</groupId>
       <artifactId>artifactregistry-maven-wagon</artifactId>
       <version>2.1.0</version>
     </extension>
   </extensions>

Sau đây là ví dụ về tệp hoàn chỉnh để bạn tham khảo. Nhớ thay thế <PROJECT> bằng mã dự án của bạn.

<?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://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
   </snapshotRepository>
   <repository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
   </repository>
 </distributionManagement>
 
 <repositories>
   <repository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/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>

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

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ó ở đó:

e348d976ac1ac107.png

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

  • Tạo kho lưu trữ cho vùng chứa và gói ngôn ngữ
  • Quản lý hình ảnh vùng chứa bằng Artifact Registry
  • Đã định cấu hình Maven để sử dụng Artifact Registry cho các phần phụ thuộc Java

Dọn dẹp

Chạy lệnh sau để xoá dự án

gcloud projects delete $PROJECT_ID