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

1. Tổng quan

Là sự phát triển 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). Phiên bản này được tích hợp đầy đủ với các công cụ và môi trường thời gian chạy của Google Cloud, đồng thời hỗ trợ việc 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. Nhờ vậy, bạn có thể dễ dàng tích hợp API 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 về một số tính năng 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í nghiệm 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 tiến độ riêng

  1. Đăng nhập vào Google Cloud Console rồi tạo dự án mới hoặc sử dụng lại 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ự không được API của Google 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à duy nhất trong tất cả các dự án Google Cloud và không thể thay đổi (không thể thay đổi sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường bạn không quan tâm đến sản phẩm đó là gì. 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 (mã này thường được xác định là PROJECT_ID). Nếu không thích mã đã tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Ngoài ra, bạn có thể thử phương pháp của riêng mình và xem có được cung cấp hay không. Bạn không thể thay đổi thông tin này sau bước này và thông báo đó sẽ vẫn tồn tại trong thời gian của dự án.
  • Đối với thông tin của bạn, có giá trị thứ ba, Project Number (Số dự án) mà một số API sử dụng. Tìm hiểu thêm về cả ba giá trị này trong tài liệu này.
  1. Tiếp theo, bạn sẽ phải bật tính năng thanh toán trong Cloud Console để sử dụng API/tài nguyên trên đám mây. Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Để tắt các tài nguyên nhằm tránh bị tính phí ngoài hướng dẫn này, bạn có thể xoá các tài nguyên bạ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í 300 USD.

Thiết lập gcloud

Trong Cloud Shell, hãy đặt mã dự án và số dự án. Hãy lưu các biến 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. Hãy sao chép tệp đó bằng lệnh bên dưới rồi thay đổi vào thư mục.

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

3. Cách dùng hình ảnh vùng chứa

Tạo một Kho lưu trữ Docker trên sổ đăng ký Artifact

Artifact Registry hỗ trợ 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 lại có thông số kỹ thuật riêng. Ví dụ: yêu cầu cho các phần phụ thuộc Maven khác với yêu cầu cho các phần phụ thuộc Nút.

Để hỗ trợ các thông số kỹ thuật khác nhau của API, Artifact Registry cần biết bạn muốn các phản hồi của API tuân theo định dạng nào. Để thực hiện 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

Trên Cloud Shell, hãy chạy lệnh sau để tạo 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 Cho phép 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 và để ý thấy kho lưu trữ Docker mới tạo có tên container-dev-repo. Nếu nhấp vào kho lưu trữ này, bạn có thể thấy kho lưu trữ này hiện đang trống

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

Khi kết nối với thông tin đăng nhập Artifact Registry để 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 của mình một cách liền mạch.

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

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

Lệnh này sẽ nhắc xác nhận thay đổi cấu hình Docker của Cloud Shell, hãy nhấn Enter.

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

Ứ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 rồi xem xét 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 có thể kết xuất 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ẽ sử dụng để tạo 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 vùng chứa.

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 trong 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 lên Artifact Registry

Chạy lệnh sau để đẩy hình ảnh vùng chứa vào 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 Google Cloud Console – Artifact Registry - Repositories. Nhấp vào container-dev-repo và kiểm tra để đảm bảo rằng hình ảnh java-hello-world có trong đó. Nhấp vào hình ảnh và chú ý đến hình ảnh được gắn thẻ tag1. Bạn có thể thấy rằng quá trình Quét lỗ hổng đang chạy hoặc đã hoàn tất và số lượng lỗ hổng bảo mật phát hiện được.

9cb46d3689b3ed2.png.

Nhấp vào số lượng lỗ hổng bảo mật và bạn sẽ thấy danh sách các lỗ hổng bảo mật được phát hiện trong hình, 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 được liệt kê để biết thêm chi tiết:

c2a961e6218d5a45.png

4. Xử lý các gói ngôn ngữ

Trong phần này, bạn sẽ tìm hiểu cách thiết lập kho lưu trữ Java của Artifact Registry và tải các gói lên kho lưu trữ đó, tận dụng chúng trong các ứng dụng khác.

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

Trên Cloud Shell, hãy chạy lệnh sau để tạo 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 Cho phép 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à thấy kho lưu trữ Maven mới tạo có tên container-dev-java-repo. Nếu nhấp vào kho lưu trữ này, bạn có thể thấy kho lưu trữ này hiện đang trống.

Thiết lập phương thức xác thực cho Artifact Repository (Kho lưu trữ cấu phần phần mềm)

Sử dụng lệnh sau để cập nhật vị trí phổ biến của 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 các thông tin đó khi kết nối với kho lưu trữ:

gcloud auth login --update-adc

Định cấu hình Maven cho Sổ đăng ký cấu phần phần mềm

Chạy lệnh sau trong 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 anh ấy:

cloudshell workspace .

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

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

62328383ea59b30c.png.

a9d756bf08575b0d.png

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

95d98e831787b2ff.pngS

Mở cửa sổ dòng lệnh trong Cloud Shell Editor và chạy lệnh sau để in cấu hình kho lưu trữ nhằm thêm vào dự án Java của bạn:

gcloud artifacts print-settings mvn \
    --repository=container-dev-java-repo \
    --location=us-central1

rồi thêm 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 với thiết bị đầu cuối tích hợp sẵn:

33c3bfa412b7babd.png.

Cập nhật mục 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 mục Repository (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 phần mở rộng

<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 của bạn lên Artifact Registry

Khi định cấu hình Artifact Registry trong Maven, giờ đây, bạn có thể sử dụng Artifact Registry để lưu trữ các Java Jars cho các dự án khác trong tổ chức của bạn.

Chạy lệnh sau để tải gói Java của bạn lên Artifact Registry:

mvn deploy

Kiểm tra gói Java trong Artifact Registry

Truy cập Cloud Console – Artifact Registry - Repositories Nhấp vào container-dev-java-repo và kiểm tra để đảm bảo 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 thành lớp học lập trình!

Nội dung bạn đã đề cập

  • Tạo kho lưu trữ cho vùng chứa và gói ngôn ngữ
  • Hình ảnh vùng chứa được quản lý 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