Tìm hiểu chuyên sâu về 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
  • Tích hợp Artifact Registry với Cloud Code
  • Đị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 và bạn có thể cập nhật chuỗi này bất cứ lúc nào.
  • Mã dự án phải 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 (và mã này thường được xác định là PROJECT_ID). Vì vậy, nếu không thích, bạn có thể tạo một mã ngẫu nhiên khác hoặc bạn có thể thử mã của riêng mình để xem có mã này chưa. Sau đó, video sẽ được "đóng băng" sau khi tạo dự án.
  • Có giá trị thứ ba là 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ẽ cần bật tính năng thanh toán trong Cloud Console để sử dụng tài nguyên/API trên Cloud. 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 để bạn không phải chịu thanh toán ngoài hướng dẫn này, hãy làm theo mọi thao tác "dọn dẹp" hướng dẫn ở cuối lớp học lập trình. 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/

Cung cấp cơ sở hạ tầng dùng trong phòng thí nghiệm này

Trong phòng thí nghiệm này, bạn sẽ triển khai mã cho GKE. Tập lệnh thiết lập dưới đây chuẩn bị cơ sở hạ tầng này cho bạn.

gcloud container clusters create container-dev-cluster --zone=us-central1-b

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 Google Cloud Console – Artifact Registry – Kho lưu trữ và chú ý đến 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:

2b17e9d26d9dd7ea.png.

4. Tích hợp với Cloud Code

Trong phần này, bạn sẽ tìm hiểu cách sử dụng kho lưu trữ hình ảnh của Artifact Registry Docker với Cloud Code.

Triển khai ứng dụng cho cụm GKE từ Cloud Code

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 .

Trình chỉnh sửa Cloud Shell sẽ mở cùng với trình khám phá trong thư mục ứng dụng.

Nếu bạn thấy một cửa sổ bật lên yêu cầu loại trừ các tệp cài đặt dự án Java khỏi không gian làm việc, hãy nhấp vào Exclude in workspace

Các bước sau đây sẽ yêu cầu bạn nhập vị trí kho lưu trữ của Sổ đăng ký cấu phần phần mềm. Định dạng của vị trí là:

us-central1-docker.pkg.dev/<PROJECT_ID>/container-dev-repo

Để tìm PROJECT_ID của bạn, hãy chạy lệnh sau trong cửa sổ dòng lệnh

gcloud config get project

Nhấp vào thanh trạng thái Mã đám mây (ở góc dưới bên trái) rồi chọn Run on Kubernetes

e6e2b06467228e18.png

Khi được nhắc, hãy chọn Yes để sử dụng ngữ cảnh hiện tại trong kubeconfig trỏ đến cụm container-dev-cluster GKE được cấp phép cho phòng thí nghiệm

Trong lời nhắc cho sổ đăng ký hình ảnh, hãy nhập vị trí địa chỉ bạn đã xác định trước khi đảm bảo thay thế <PROJECT_ID> giá trị thực tế của bạn

us-central1-docker.pkg.dev/<PROJECT_ID>/container-dev-repo

Khi bạn thực thi Chạy trên Kubernetes lần đầu tiên Cloud Code nhắc bạn về vị trí kho lưu trữ hình ảnh đích. Sau khi được cung cấp, URL kho lưu trữ sẽ được lưu trữ trong tệp .vscode/launch.json được tạo trong thư mục ứng dụng.

Trong ngăn đầu ra, bạn sẽ thấy quá trình tạo bản dựng bắt đầu cho hình ảnh ứng dụng java-hello-world,, hình ảnh này được tải lên kho lưu trữ Artifact Registry đã được định cấu hình trước đó

Truy cập Cloud Console – Artifact Registry - Repositories Nhấp vào container-dev-repo rồi kiểm tra để đảm bảo hình ảnh java-hello-world và ghi chú một hình ảnh mới được gắn thẻ latest

Xem xét ứng dụng đã triển khai

Quay lại Cloud Shell Editor: khi triển khai xong Skaffold/Cloud Code sẽ in url hiển thị nơi dịch vụ đã được chuyển tiếp, hãy nhấp vào đường liên kết – Mở bản xem trước trên web:

33257a43826b88ff.pngS

Trong cửa sổ trình duyệt mới, bạn sẽ thấy trang ứng dụng Hello world (Xin chào thế giới)

d3e49693b0383a5d.png

Cập nhật mã xử lý ứng dụng

Bây giờ, hãy cập nhật ứng dụng để xem thay đổi được triển khai ngay trong quá trình triển khai trên cụm:

Mở HelloWorldController.java trong thư mục src/main/java/cloudcode/helloworld/web trong Cloud Shell Editor.

Thay đổi văn bản ở hàng 20 từ "Đang chạy!" thành ""Đã cập nhật ứng dụng!", thì bạn sẽ thấy quy trình xây dựng và triển khai bắt đầu ngay lập tức.

Vào cuối quá trình triển khai, hãy nhấp lại vào url được chuyển tiếp hoặc làm mới cửa sổ trình duyệt bằng ứng dụng để xem thay đổi của bạn được triển khai:

41787b1da54ff137.pngS

Truy cập lại vào Cloud Console – Artifact Registry - Repositories Nhấp vào container-dev-repo rồi kiểm tra để đảm bảo hình ảnh java-hello-world xuất hiện và ghi chú hình ảnh mới

5. 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 rằng 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 để in cấu hình kho lưu trữ cần thêm vào dự án Java:

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

Mở pom.xml trong Cloud Shell Editor và thêm cài đặt được trả về vào các phần thích hợp trong tệp,

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

6. 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
  • Tích hợp Artifact Registry với Cloud Code
  • Đị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