1. ภาพรวม
เนื่องจากเป็นการพัฒนาของ Container Registry ทำให้ Artifact Registry เป็นจุดเดียวสำหรับองค์กรของคุณในการจัดการอิมเมจคอนเทนเนอร์และแพ็กเกจภาษา (เช่น Maven และ NPM) โดยผสานรวมกับเครื่องมือและรันไทม์ของ Google Cloud อย่างเต็มรูปแบบ รวมถึงรองรับการจัดการทรัพยากรตามภาษาเพื่อใช้กับเครื่องมือต่างๆ เช่น npm และ Maven ซึ่งช่วยให้คุณผสานรวมเครื่องมือ CI/CD เข้ากับเครื่องมือ CI/CD เพื่อตั้งค่าไปป์ไลน์อัตโนมัติได้อย่างง่ายดาย
ห้องทดลองนี้จะแนะนำฟีเจอร์บางอย่างที่มีอยู่ในที่เก็บอาร์ติแฟกต์
สิ่งที่คุณจะได้เรียนรู้
วัตถุประสงค์การเรียนรู้ของห้องทดลองนี้คืออะไร
- สร้างที่เก็บสำหรับคอนเทนเนอร์และแพ็กเกจภาษา
- จัดการอิมเมจคอนเทนเนอร์ด้วย Artifact Registry
- ผสานรวม Artifact Registry กับโค้ดระบบคลาวด์
- กำหนดค่า Maven ให้ใช้ Artifact Registry สําหรับการอ้างอิง Java
2. การตั้งค่าและข้อกําหนด
การตั้งค่าสภาพแวดล้อมด้วยตนเอง
- ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
- ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ เป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้และคุณอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์ต้องไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันขึ้นมาโดยอัตโนมัติ ซึ่งโดยมากคุณไม่สนใจก็ได้ว่านี่คืออะไร ใน Codelab ส่วนใหญ่คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (และมักจะระบุเป็น
PROJECT_ID
) ดังนั้นหากคุณไม่ชอบรหัสนี้จะสุ่มขึ้นมาอีก 1 รหัส หรือคุณจะลองใช้รหัสของคุณเองแล้วดูว่าใช้ได้หรือไม่ จากนั้นระบบจะ "หยุด" โปรเจ็กต์ไว้หลังจากสร้างโปรเจ็กต์แล้ว - ค่าที่ 3 คือหมายเลขโปรเจ็กต์ที่ API บางรายการใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 รายการนี้ได้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำงานในโค้ดแล็บนี้แทบจะไม่เสียค่าใช้จ่ายใดๆ เลย หากต้องการปิดใช้ทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินหลังจากบทแนะนำนี้ ให้ทําตามวิธีการ "ล้างข้อมูล" ที่แสดงอยู่ท้าย Codelab ผู้ใช้ใหม่ของ Google Cloud มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD
ตั้งค่า gcloud
ใน Cloud Shell ให้ตั้งค่ารหัสโปรเจ็กต์และหมายเลขโปรเจ็กต์ บันทึกเป็นตัวแปร PROJECT_ID
และ PROJECT_NUMBER
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
เปิดใช้บริการของ Google
gcloud services enable \
cloudresourcemanager.googleapis.com \
container.googleapis.com \
artifactregistry.googleapis.com \
containerregistry.googleapis.com \
containerscanning.googleapis.com
รับซอร์สโค้ด
ซอร์สโค้ดของห้องทดลองนี้อยู่ในองค์กร GoogleCloudPlatform บน GitHub โคลนไฟล์ด้วยคำสั่งด้านล่างแล้วเปลี่ยนเป็นไดเรกทอรี
git clone https://github.com/GoogleCloudPlatform/cloud-code-samples/
จัดสรรโครงสร้างพื้นฐานที่ใช้ในห้องทดลองนี้
คุณจะทำให้โค้ดใช้งานได้กับ GKE ในห้องทดลองนี้ สคริปต์การตั้งค่าด้านล่างจะเตรียมโครงสร้างพื้นฐานนี้ให้คุณ
gcloud container clusters create container-dev-cluster --zone=us-central1-b
3. การทำงานกับอิมเมจคอนเทนเนอร์
สร้างที่เก็บ Docker ใน Artifact Registry
Artifact Registry รองรับการจัดการอิมเมจคอนเทนเนอร์และแพ็กเกจภาษา อาร์ติแฟกต์แต่ละประเภทมีข้อกำหนดที่แตกต่างกัน เช่น คำขอสำหรับ Dependency ของ Maven จะแตกต่างจากคำขอสำหรับ Dependency ของ Node
Artifact Registry จำเป็นต้องทราบว่าคุณต้องการให้การตอบกลับ API ใช้รูปแบบใดเพื่อรองรับข้อกำหนด API ที่แตกต่างกัน โดยคุณจะสร้างที่เก็บและส่ง Flag --repository-format
ที่ระบุประเภทที่เก็บที่ต้องการ
จาก Cloud Shell ให้เรียกใช้คําสั่งต่อไปนี้เพื่อสร้างที่เก็บสำหรับอิมเมจ Docker
gcloud artifacts repositories create container-dev-repo --repository-format=docker \
--location=us-central1 --description="Docker repository for Container Dev Workshop"
คลิก "ให้สิทธิ์" หากข้อความแจ้งการให้สิทธิ์ Cloud Shell ปรากฏขึ้น
ไปที่ Google Cloud Console - Artifact Registry - Repositories และสังเกตที่เก็บ Docker ที่สร้างใหม่ชื่อ container-dev-repo
หากคลิก คุณจะเห็นว่าตอนนี้ว่างเปล่า
กำหนดค่าการตรวจสอบสิทธิ์ Docker ไปยัง Artifact Registry
เมื่อเชื่อมต่อกับ Artifact Registry คุณต้องใช้ข้อมูลเข้าสู่ระบบเพื่อให้สิทธิ์เข้าถึง คุณกำหนดค่า Docker ให้ใช้ข้อมูลเข้าสู่ระบบ gcloud ได้อย่างราบรื่นแทนการตั้งค่าข้อมูลเข้าสู่ระบบแยกต่างหากได้
จาก Cloud Shell ให้เรียกใช้คําสั่งต่อไปนี้เพื่อกําหนดค่า Docker ให้ใช้ CLI ของ Google Cloud เพื่อตรวจสอบสิทธิ์คําขอไปยัง Artifact Registry ในภูมิภาค us-central1
gcloud auth configure-docker us-central1-docker.pkg.dev
คำสั่งจะแสดงข้อความให้ยืนยันเพื่อเปลี่ยนการกำหนดค่า Docker ของ Cloud Shell แล้วกด Enter
สำรวจแอปพลิเคชันตัวอย่าง
ตัวอย่างแอปพลิเคชันจะอยู่ในที่เก็บ Git ที่คุณโคลนไว้ในขั้นตอนก่อนหน้า เปลี่ยนเป็นไดเรกทอรี java และตรวจสอบโค้ดแอปพลิเคชัน
cd cloud-code-samples/java/java-hello-world
โฟลเดอร์นี้มีตัวอย่างแอปพลิเคชัน Java ที่แสดงผลหน้าเว็บอย่างง่าย นอกจากไฟล์ต่างๆ ที่ไม่เกี่ยวข้องกับห้องทดลองนี้ โฟลเดอร์ยังมีซอร์สโค้ดอยู่ในโฟลเดอร์ src
และ Dockerfile ที่เราจะใช้สร้างอิมเมจคอนเทนเนอร์ในเครื่อง
สร้างอิมเมจคอนเทนเนอร์
คุณจะต้องสร้างอิมเมจคอนเทนเนอร์ใน Artifact Registry ก่อนจึงจะจัดเก็บได้
เรียกใช้คําสั่งต่อไปนี้เพื่อสร้างอิมเมจคอนเทนเนอร์และติดแท็กอย่างถูกต้องเพื่อพุชไปยังที่เก็บข้อมูลในขั้นตอนถัดไป
docker build -t us-central1-docker.pkg.dev/$PROJECT_ID/container-dev-repo/java-hello-world:tag1 .
พุชอิมเมจคอนเทนเนอร์ไปยัง Artifact Registry
เรียกใช้คำสั่งต่อไปนี้เพื่อพุชอิมเมจคอนเทนเนอร์ไปยังที่เก็บข้อมูลที่สร้างขึ้นก่อนหน้านี้
docker push us-central1-docker.pkg.dev/$PROJECT_ID/container-dev-repo/java-hello-world:tag1
ตรวจสอบอิมเมจใน Artifact Registry
ไปที่ Cloud Console - Artifact Registry - Repositories ของ Google.
คลิก container-dev-repo
แล้วตรวจสอบว่ามีอิมเมจ java-hello-world
อยู่ คลิกรูปภาพและดูรูปภาพที่ติดแท็ก tag1
คุณจะเห็นการสแกนช่องโหว่ที่ทำงานอยู่หรือเสร็จสิ้นแล้ว และจะเห็นจำนวนช่องโหว่ที่ตรวจพบ
คลิกจำนวนช่องโหว่ แล้วคุณจะเห็นรายการช่องโหว่ที่ตรวจพบในรูปภาพ พร้อมชื่อกระดานข่าวสาร CVE และความรุนแรง คุณสามารถคลิก "ดู" บนช่องโหว่แต่ละรายการที่แสดงเพื่อดูรายละเอียดเพิ่มเติม
4. การผสานรวมกับ Cloud Code
ในส่วนนี้ คุณจะได้ทราบวิธีใช้ที่เก็บอิมเมจ Docker ของ Artifact Registry กับ Cloud Code
ทำให้แอปพลิเคชันใช้งานได้ในคลัสเตอร์ GKE จาก Cloud Code
เรียกใช้คำสั่งต่อไปนี้จากโฟลเดอร์ java-hello-world
เพื่อเปิด Cloud Shell Editor และเพิ่มโฟลเดอร์แอปพลิเคชันลงในพื้นที่ทํางาน
cloudshell workspace .
ตัวแก้ไข Cloud Shell จะเปิดขึ้นพร้อมตัวสำรวจในโฟลเดอร์แอปพลิเคชัน
หากได้รับป๊อปอัปที่ขอให้ยกเว้นไฟล์การตั้งค่าโปรเจ็กต์ Java ออกจากพื้นที่ทำงาน ให้คลิก Exclude in workspace
ขั้นตอนต่อไปนี้จะกำหนดให้คุณป้อนตำแหน่งที่เก็บข้อมูล Artifact Registry รูปแบบของสถานที่ตั้งมีดังนี้
us-central1-docker.pkg.dev/<PROJECT_ID>/container-dev-repo
หากต้องการค้นหา PROJECT_ID ให้เรียกใช้คําสั่งต่อไปนี้ในเทอร์มินัล
gcloud config get project
คลิกแถบสถานะของ Cloud Code (ที่มุมล่างซ้าย) แล้วเลือก Run on Kubernetes
เมื่อได้รับข้อความแจ้ง ให้เลือก Yes
เพื่อใช้บริบทปัจจุบันใน kubeconfig ที่ชี้ไปยังคลัสเตอร์ GKE container-dev-cluster
ที่เตรียมไว้สําหรับห้องทดลอง
ในพรอมต์สำหรับรีจิสทรีรูปภาพ ให้ใส่ตำแหน่งที่อยู่ที่คุณพบก่อนหน้านี้ อย่าลืมแทนที่ <PROJECT_ID> ด้วยค่าจริง
us-central1-docker.pkg.dev/<PROJECT_ID>/container-dev-repo
เมื่อเรียกใช้ "เรียกใช้บน Kubernetes" เป็นครั้งแรก Cloud Code จะแจ้งให้คุณระบุตำแหน่งที่เก็บข้อมูลรูปภาพเป้าหมาย เมื่อระบุแล้ว ระบบจะจัดเก็บ URL ของที่เก็บไว้ในไฟล์ .vscode/launch.json
ซึ่งสร้างขึ้นในโฟลเดอร์แอปพลิเคชัน
ในแผงเอาต์พุต คุณจะเห็นการเริ่มสร้างสำหรับรูปภาพแอปพลิเคชัน java-hello-world,
ระบบจะอัปโหลดรูปภาพไปยังที่เก็บ Artifact Registry ที่กําหนดค่าไว้ก่อนหน้านี้
ไปที่ Cloud Console - Artifact Registry - Repositories คลิก container-dev-repo
แล้วตรวจสอบว่ารูปภาพ java-hello-world
และติดแท็กรูปภาพใหม่latest
ตรวจสอบแอปพลิเคชันที่ทำให้ใช้งานได้แล้ว
กลับไปที่ Cloud Shell Editor: เมื่อการทำให้ใช้งานได้เสร็จสมบูรณ์แล้ว Skaffold/Cloud Code จะพิมพ์ URL ที่เปิดเผยซึ่งมีการส่งต่อบริการแล้ว คลิกลิงก์ - เปิดตัวอย่างเว็บ:
ในหน้าต่างเบราว์เซอร์ใหม่ คุณจะเห็นหน้าแอป Hello World
อัปเดตโค้ดแอปพลิเคชัน
ตอนนี้อัปเดตแอปพลิเคชันเพื่อดูการเปลี่ยนแปลงที่ใช้งานในคลัสเตอร์ได้ทันที
เปิด HelloWorldController.java
ในโฟลเดอร์ src/main/java/cloudcode/helloworld/web
ใน Cloud Shell Editor
เปลี่ยนข้อความในแถว 20 จาก "ข้อความทำงานอยู่" เป็น "มีการอัปเดตแล้ว" คุณควรจะเห็นขั้นตอนการสร้างและการทำให้ใช้งานได้เริ่มต้นขึ้นทันที
เมื่อสิ้นสุดการทำให้ใช้งานได้ ให้คลิก URL ที่ส่งต่ออีกครั้ง หรือรีเฟรชหน้าต่างเบราว์เซอร์ด้วยแอปพลิเคชันเพื่อดูการนำการเปลี่ยนแปลงไปใช้ ดังนี้
ไปที่ Cloud Console - Artifact Registry - Repositories อีกครั้ง คลิก container-dev-repo
แล้วตรวจสอบว่ามีรูปภาพ java-hello-world
และบันทึกรูปภาพใหม่
5. การทำงานกับแพ็กเกจภาษา
ในส่วนนี้ คุณจะได้ทราบถึงวิธีตั้งค่าที่เก็บ Artifact Registry Java และอัปโหลดแพ็กเกจไปยังที่เก็บดังกล่าว โดยใช้ประโยชน์จากที่เก็บดังกล่าวในแอปพลิเคชันต่างๆ
สร้างที่เก็บแพ็กเกจ Java
จาก Cloud Shell ให้เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างที่เก็บสำหรับอาร์ติแฟกต์ Java
gcloud artifacts repositories create container-dev-java-repo \
--repository-format=maven \
--location=us-central1 \
--description="Java package repository for Container Dev Workshop"
คลิก "ให้สิทธิ์" หากข้อความแจ้งการให้สิทธิ์ Cloud Shell ปรากฏขึ้น
ไปที่ Google Cloud Console - Artifact Registry - Repositories และสังเกตที่เก็บ Maven ที่สร้างขึ้นใหม่ชื่อ container-dev-java-repo
เมื่อคลิกที่เก็บนี้ คุณจะเห็นว่ามันว่างเปล่าในขณะนี้
ตั้งค่าการตรวจสอบสิทธิ์กับที่เก็บอาร์ติแฟกต์
ใช้คำสั่งต่อไปนี้เพื่ออัปเดตตำแหน่งที่รู้จักสำหรับข้อมูลรับรองเริ่มต้นของแอปพลิเคชัน (ADC) ด้วยข้อมูลเข้าสู่ระบบของบัญชีผู้ใช้ เพื่อให้ผู้ช่วยข้อมูลเข้าสู่ระบบ Artifact Registry สามารถตรวจสอบสิทธิ์การใช้ตำแหน่งดังกล่าวเมื่อเชื่อมต่อกับที่เก็บ
gcloud auth login --update-adc
กำหนดค่า Maven สำหรับ Artifact Registry
เรียกใช้คำสั่งต่อไปนี้เพื่อพิมพ์การกำหนดค่าที่เก็บเพื่อเพิ่มในโปรเจ็กต์ Java
gcloud artifacts print-settings mvn \
--repository=container-dev-java-repo \
--location=us-central1
เปิด pom.xml ใน Cloud Shell Editor แล้วเพิ่มการตั้งค่าที่แสดงผลลงในส่วนที่เหมาะสมในไฟล์
อัปเดตส่วน 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>
อัปเดตส่วน 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>
อัปเดตส่วนขยาย
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.1.0</version>
</extension>
</extensions>
ต่อไปนี้คือตัวอย่างไฟล์ที่สมบูรณ์สำหรับใช้อ้างอิง อย่าลืมแทนที่ <PROJECT> ด้วยรหัสโปรเจ็กต์ของคุณ
<?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>
อัปโหลดแพ็กเกจ Java ไปยัง Artifact Registry
เมื่อกำหนดค่า Artifact Registry ใน Maven แล้ว คุณจะใช้ Artifact Registry เพื่อจัดเก็บไฟล์ Java Jar ไว้ให้โปรเจ็กต์อื่นๆ ในองค์กรของคุณใช้ได้
เรียกใช้คำสั่งต่อไปนี้เพื่ออัปโหลดแพ็กเกจ Java ไปยัง Artifact Registry
mvn deploy
ตรวจสอบแพ็กเกจ Java ใน Artifact Registry
ไปที่ Cloud Console - Artifact Registry - Repositories คลิก container-dev-java-repo
แล้วตรวจสอบว่ามีอาร์ติแฟกต์ไบนารี hello-world
อยู่
6. ยินดีด้วย
ยินดีด้วย คุณทำ Codelab เสร็จแล้ว
สิ่งที่คุณได้ครอบคลุม
- สร้างที่เก็บสำหรับคอนเทนเนอร์และแพ็กเกจภาษาแล้ว
- อิมเมจคอนเทนเนอร์ที่มีการจัดการด้วย Artifact Registry
- Artifact Registry ที่ผสานรวมกับ Cloud Code
- กำหนดค่า Maven ให้ใช้ Artifact Registry สําหรับการอ้างอิง Java
ล้างข้อมูล
เรียกใช้คำสั่งต่อไปนี้เพื่อลบโปรเจ็กต์
gcloud projects delete $PROJECT_ID