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ý hình ảnh vùng chứa và gói ngôn ngữ (chẳng hạn như Maven và npm). Công cụ 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ợ 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.
Trong lớp học này, bạn sẽ tìm hiểu một số tính năng có trong Cấu phần phần mềm.
Kiến thức bạn sẽ học được
Mục tiêu học tập của lớp học 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 Cấu phần phần mềm cho phần phụ thuộc Java
2. Cách thiết lập và các yêu cầu
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ị cho 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 trên tất cả các dự án Google Cloud và không thể thay đổi được (không thể thay đổi 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 (và mã này thường được xác định là
PROJECT_ID
). Vì vậy, nếu không thích mã này, hãy 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 và xem mã đó có được chấp nhận hay không. Sau đó, tệp này sẽ "đóng băng" sau khi dự án được tạo. - Có một giá trị thứ ba là Mã 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.
- 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 tham gia lớp học lập trình này sẽ không tốn kém nhiều chi phí, nếu có. Để tắt các tài nguyên để không bị tính phí sau khi kết thúc hướng dẫn này, hãy làm theo hướng dẫn "dọn dẹp" ở 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. Lưu các biến 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 Dịch vụ 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 lớp học lập trình 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 lớp học này
Trong lớp học này, bạn sẽ triển khai mã cho GKE. Tập lệnh thiết lập bên dưới sẽ 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. 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ợ quản lý hình ảnh vùng chứa và gói ngôn ngữ. Các loại cấu phần phần mềm khác nhau yêu cầu các thông số kỹ thuật khác nhau. Ví dụ: các yêu cầu về phần phụ thuộc Maven khác với các yêu cầu về phần phụ thuộc Node.
Để hỗ trợ nhiều quy cách API, Cấu phần phần mềm cần biết định dạng mà bạn muốn phản hồi API tuân theo. Để 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 tính năng Xác thực Docker cho Artifact Registry
Khi kết nối với Artifact Registry, bạn phải có thông tin xác thực để cung cấp quyền truy cập. Thay vì thiết lập thông tin xác thực riêng biệt, bạn có thể định cấu hình Docker để sử dụng thông tin xác thực gcloud một cách liền mạch.
Trên Cloud Shell, hãy chạy lệnh sau để định cấu hình Docker nhằm sử dụng Google Cloud CLI để xác thực các yêu cầu gửi đến 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 của Cloud Shell, hãy nhấn 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 đã nhân bản ở bước trước. Chuyển sang thư mục java và xem lại mã ứ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 lớp học lập trình cụ thể này, thư mục này còn chứa mã nguồn trong thư mục src
và một tệp 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 Kho lưu trữ cấu phần phần mềm, 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ẻ hình ảnh đó đú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 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 Cấu phần phần mềm
Truy cập vào Google Cloud Console – Artifact Registry – Repositories (Google Cloud Console – Cấu phần phần mềm – Kho lưu trữ).
Nhấp vào container-dev-repo
và kiểm tra để đảm bảo hình ảnh java-hello-world
có trong đó. Nhấp vào hình ảnh và lưu ý hình ảnh được gắn thẻ tag1
. Bạn có thể thấy quy trình 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.
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:
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 hình ảnh Docker của Cấu phần phần mềm bằng Cloud Code.
Triển khai ứng dụng cho cụm GKE từ Cloud Code
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 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
Trong các bước sau, bạn sẽ phải nhập vị trí kho lưu trữ 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, hãy chạy lệnh sau trong dòng lệnh
gcloud config get project
Nhấp vào thanh trạng thái của Cloud Code (ở góc dưới bên trái) rồi chọn Run on Kubernetes
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 đặt vị trí địa chỉ mà bạn đã tìm thấy trước khi đảm bảo thay thế <PROJECT_ID> cho 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 bản dựng bắt đầu cho hình ảnh ứng dụng java-hello-world,
hình ảnh được tải lên kho lưu trữ Cấu phần phần mềm đã định cấu hình trước đó
Chuyển đến Cloud Console – Artifact Registry – Repositories (Bảng điều khiển Google Cloud – Cấu phần phần mềm – Kho lưu trữ) Nhấp vào container-dev-repo
và kiểm tra để đảm bảo hình ảnh java-hello-world
và lưu ý một hình ảnh mới được gắn thẻ latest
Xem lại ứng dụng đã triển khai
Quay lại Trình chỉnh sửa Cloud Shell: khi quá trình triển khai hoàn tất, 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:
Trong cửa sổ trình duyệt mới, bạn sẽ thấy trang ứng dụng hello world
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 lập tức 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 trong hàng 20 từ "It's running!" (Đang chạy!) thành ""It's updated!"" (Đã cập nhật!), bạn sẽ thấy quá trình tạo bản 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:
Quay lại Cloud Console – Artifact Registry – Repositories (Bảng điều khiển trên đám mây – Cấu phần phần mềm – Kho lưu trữ). Nhấp vào container-dev-repo
và kiểm tra để đảm bảo hình ảnh java-hello-world
và ghi lại hình ảnh mới
5. Làm việc với 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 Cấu phần phần mềm và tải các gói lên kho lưu trữ đó, tận dụng các gói đó trong nhiều ứng dụng.
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ấ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
Chuyển đến Google Cloud Console – Cấu phần phần mềm – Kho lưu trữ và chú ý đế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 kho lưu trữ này hiện đang trống.
Thiết lập tính năng xác thực vào 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 Artifact Registry
Chạy lệnh sau để in cấu hình kho lưu trữ nhằm thêm vào dự án Java:
gcloud artifacts print-settings mvn \
--repository=container-dev-java-repo \
--location=us-central1
Mở pom.xml trong Trình chỉnh sửa Cloud Shell 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,
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 repositories
<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. Hãy 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 Cấu phần phần mềm lưu trữ
Khi đã định cấu hình Cấu phần phần mềm trong Maven, giờ đây, bạn có thể sử dụng Cấu phần phần mềm để 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 của bạn lên Artifact Registry:
mvn deploy
Kiểm tra gói Java trong Cấu phần phần mềm lưu trữ
Chuyển đến Cloud Console – Artifact Registry – Repositories (Cloud Console – Cấu phần phần mềm – Kho lưu trữ) 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ó trong đó:
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