1. ภาพรวม
Artifact Registry ช่วยให้คุณจัดเก็บอาร์ติแฟกต์ประเภทต่างๆ สร้างที่เก็บหลายรายการในโปรเจ็กต์เดียว และเชื่อมโยงภูมิภาคที่เฉพาะเจาะจงหรือหลายภูมิภาคกับที่เก็บแต่ละรายการได้ โดยมีโหมดที่เก็บหลายโหมด แต่ละโหมดมีจุดประสงค์ที่แตกต่างกัน แผนภาพต่อไปนี้แสดงวิธีหนึ่งในหลายๆ วิธีที่คุณสามารถใช้ที่เก็บในโหมดต่างๆ ร่วมกันได้ แผนภาพแสดงเวิร์กโฟลว์ในโปรเจ็กต์ Google Cloud 2 รายการ ในโปรเจ็กต์การพัฒนา นักพัฒนาซอฟต์แวร์จะสร้างแอปพลิเคชัน Java ในโปรเจ็กต์รันไทม์แยกต่างหาก บิลด์อื่นจะสร้างอิมเมจคอนเทนเนอร์ที่มีแอปพลิเคชันสำหรับการทําให้ใช้งานได้ใน Google Kubernetes Engine

ในแล็บนี้ คุณจะได้เรียนรู้วิธีทำงานต่อไปนี้
- ใช้ที่เก็บมาตรฐานเพื่อติดตั้งใช้งานแพ็กเกจส่วนตัว
- ใช้ที่เก็บข้อมูลระยะไกลเพื่อแคชแพ็กเกจ Maven Central
- ใช้ที่เก็บเสมือนเพื่อรวมที่เก็บต้นทางหลายรายการไว้ในการกำหนดค่าเดียว
การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง
- ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี



- ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ โดยคุณจะอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์จะไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น
PROJECT_ID) หากไม่ชอบรหัสที่สร้างขึ้น คุณก็สร้างรหัสแบบสุ่มอีกรหัสหนึ่งได้ หรือคุณจะลองใช้ชื่อของคุณเองเพื่อดูว่าพร้อมใช้งานหรือไม่ก็ได้ คุณจะเปลี่ยนแปลงรหัสนี้หลังจากขั้นตอนนี้ไม่ได้ และรหัสจะยังคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - โปรดทราบว่ายังมีค่าที่ 3 ซึ่งคือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
- จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างขึ้นหรือลบทั้งโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD
การตั้งค่า Workspace
ตั้งค่า 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)')
เปิดใช้ API
gcloud services enable artifactregistry.googleapis.com
โคลนที่เก็บ
git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/container-registry/container-analysis
2. ที่เก็บมาตรฐาน
ที่เก็บข้อมูลมาตรฐานเป็นวิธีจัดเก็บแพ็กเกจส่วนตัวและแชร์ในแอปพลิเคชันอื่นๆ
สร้างที่เก็บ Maven มาตรฐาน
จาก 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 - Artifact Registry - ที่เก็บ แล้วดูที่เก็บ Maven ที่สร้างขึ้นใหม่ชื่อ container-dev-java-repo หากคลิกที่ที่เก็บดังกล่าว คุณจะเห็นว่าที่เก็บนั้นว่างเปล่าในขณะนี้
gcloud artifacts repositories describe container-dev-java-repo \
--location=us-central1
ควรแสดงการตอบกลับที่คล้ายกับต่อไปนี้
Encryption: Google-managed key
Repository Size: 0.000MB
createTime: '2023-03-21T19:01:45.461589Z'
description: Java package repository for Container Dev Workshop
format: MAVEN
mavenConfig: {}
mode: STANDARD_REPOSITORY
name: projects/qwiklabs-gcp-03-4304110dc461/locations/us-central1/repositories/container-dev-java-repo
updateTime: '2023-03-21T19:01:45.461589Z'
กำหนดค่า Maven สำหรับ Artifact Registry
เรียกใช้คำสั่งต่อไปนี้เพื่อพิมพ์การกำหนดค่าที่เก็บเพื่อเพิ่มลงในโปรเจ็กต์ Java
gcloud artifacts print-settings mvn \
--repository=container-dev-java-repo \
--location=us-central1
คำสั่งก่อนหน้าจะแสดง XML ที่จะเพิ่มลงใน pom.xml ของโปรเจ็กต์
- ส่วนที่เก็บจะระบุตำแหน่งที่ Maven อาจดาวน์โหลดอาร์ติแฟกต์ระยะไกลเพื่อใช้ในโปรเจ็กต์ปัจจุบัน
- ส่วน distributionManagement จะระบุที่เก็บข้อมูลระยะไกลที่โปรเจ็กต์จะพุชเมื่อมีการติดตั้งใช้งาน
- ส่วนส่วนขยายจะเพิ่ม artifactregistry-maven-wagon ซึ่งเปิดใช้เลเยอร์การตรวจสอบสิทธิ์และการรับส่งที่จำเป็นสำหรับการเชื่อมต่อกับ Artifact Registry
- หมายเหตุ: ส่วนขยายอาจอยู่ใน pom.xml หรือ extensions.xml ในกรณีที่โปรเจ็กต์ขึ้นอยู่กับโปรเจ็กต์หลัก ระบบจะเข้าถึงการอ้างอิงเหล่านั้นก่อนที่จะโหลดรายการอื่นๆ ใน pom.xml หากต้องการให้แน่ใจว่าผู้ปกครองมีสิทธิ์เข้าถึงส่วนขยาย คุณสามารถวางส่วนขยายไว้ในไฟล์ extensions.xml ซึ่งจะโหลดก่อน pom.xml เพื่อให้พร้อมใช้งานสำหรับการอ้างอิงขององค์ประกอบหลัก
คัดลอกทั้ง 3 ส่วน จากนั้นเปิด pom.xml ใน Cloud Shell Editor แล้วเพิ่มการตั้งค่าที่ส่งคืนมาไว้ที่ด้านล่างของไฟล์ภายในแท็กปิด project
เคล็ดลับ: ใน Cloud Shell ให้เรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัลเพื่อเปิดโปรแกรมแก้ไขในไดเรกทอรีปัจจุบัน
cloudshell workspace .
ตัวอย่าง: (ชื่อโปรเจ็กต์ของคุณจะแตกต่างกันใน URL)
...
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
</build>
</project>
อัปโหลดแพ็กเกจ Java ไปยัง Artifact Registry
เมื่อกำหนดค่า Artifact Registry ใน Maven แล้ว คุณจะใช้ Artifact Registry เพื่อจัดเก็บไฟล์ JAR ของ Java สำหรับโปรเจ็กต์อื่นๆ ในองค์กรได้
เรียกใช้คำสั่งต่อไปนี้เพื่ออัปโหลดแพ็กเกจ Java ไปยัง Artifact Registry
mvn deploy -DskipTests
หากต้องการเรียกใช้คำสั่งนี้อีกครั้ง โปรดอย่าลืมเพิ่มเวอร์ชันใน pom.xml
ตรวจสอบแพ็กเกจ Java ใน Artifact Registry
ไปที่ Cloud Console - Artifact Registry - ที่เก็บ คลิก container-dev-java-repo แล้วตรวจสอบว่ามีอาร์ติแฟกต์ไบนารี hello-world อยู่

3. ที่เก็บระยะไกล
ที่เก็บข้อมูลระยะไกลช่วยให้แคชแพ็กเกจของบุคคลที่สามได้เพื่อเพิ่มความน่าเชื่อถือและความปลอดภัย
สร้างที่เก็บข้อมูลระยะไกล
หมายเหตุ: ดูรายละเอียดเกี่ยวกับการตรวจสอบสิทธิ์และการกำหนดค่าได้ในเอกสารประกอบของผลิตภัณฑ์
จาก Cloud Shell ให้เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างที่เก็บข้อมูลระยะไกลสำหรับอาร์ติแฟกต์ Maven Central
gcloud artifacts repositories create maven-central-cache \
--project=$PROJECT_ID \
--repository-format=maven \
--location=us-central1 \
--description="Remote repository for Maven Central caching" \
--mode=remote-repository \
--remote-repo-config-desc="Maven Central" \
--remote-mvn-repo=MAVEN-CENTRAL
ตรวจสอบที่เก็บในคอนโซล
ไปที่ Cloud Console - Artifact Registry - ที่เก็บ คลิก maven-central-cache แล้วสังเกตว่าที่เก็บถูกสร้างขึ้นและว่างเปล่า
ตรวจสอบที่เก็บในเทอร์มินัล
gcloud artifacts repositories describe maven-central-cache \
--location=us-central1
ผสานรวมที่เก็บเข้ากับโปรเจ็กต์
เรียกใช้คำสั่งต่อไปนี้เพื่อพิมพ์การกำหนดค่าที่เก็บเพื่อเพิ่มลงในโปรเจ็กต์ Java
gcloud artifacts print-settings mvn \
--repository=maven-central-cache \
--location=us-central1
เพิ่มส่วนที่เก็บลงใน pom.xml โปรดอย่าคัดลอกแท็ก <repositories> ด้านนอกจากเอาต์พุต
เปลี่ยนรหัสของที่เก็บที่เพิ่มใหม่เป็น "central" เพื่อให้มั่นใจว่ารายการที่เก็บแต่ละรายการมีรหัสที่ไม่ซ้ำกัน
ตัวอย่าง: (ชื่อโปรเจ็กต์ของคุณจะแตกต่างกันใน URL)
...
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>central</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/maven-central-cache</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
</build>
</project>
เรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัลเพื่อสร้าง extensions.xml สำหรับโปรเจ็กต์ของคุณ เพื่อใช้กลไกส่วนขยายหลักที่ช่วยให้มั่นใจว่า Maven สามารถแก้ไขทรัพยากร Dependency ของส่วนขยายหลักหรือปลั๊กอินจาก Artifact Registry ได้
mkdir .mvn
cat > .mvn/extensions.xml << EOF
<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd">
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
EOF
ดึงทรัพยากร Dependency จากที่เก็บข้อมูลระยะไกล
เรียกใช้คำสั่งต่อไปนี้เพื่อคอมไพล์แอปพลิเคชันโดยใช้ที่เก็บข้อมูลระยะไกล
rm -rf ~/.m2/repository
mvn compile
ตรวจสอบแพ็กเกจในคอนโซล
ไปที่ Cloud Console - Artifact Registry - ที่เก็บ คลิก maven-central-cache แล้วตรวจสอบว่าอาร์ติแฟกต์ไบนารีที่แคชไว้มีดังนี้

4. ที่เก็บเสมือน
ที่เก็บข้อมูลเสมือนทำหน้าที่เป็นอินเทอร์เฟซสำหรับที่เก็บข้อมูลหลายรายการเพื่อให้เข้าถึงได้ผ่านการกำหนดค่าเดียว ซึ่งจะช่วยลดความซับซ้อนในการกำหนดค่าไคลเอ็นต์สำหรับผู้ใช้สิ่งประดิษฐ์ของคุณ และเพิ่มความปลอดภัยด้วยการลดการโจมตีแบบสับสนในการพึ่งพา
สร้างไฟล์นโยบาย
cat > ./policy.json << EOF
[
{
"id": "private",
"repository": "projects/${PROJECT_ID}/locations/us-central1/repositories/container-dev-java-repo",
"priority": 100
},
{
"id": "central",
"repository": "projects/${PROJECT_ID}/locations/us-central1/repositories/maven-central-cache",
"priority": 80
}
]
EOF
สร้างที่เก็บเสมือน
gcloud artifacts repositories create virtual-maven-repo \
--project=${PROJECT_ID} \
--repository-format=maven \
--mode=virtual-repository \
--location=us-central1 \
--description="Virtual Maven Repo" \
--upstream-policy-file=./policy.json
ผสานรวมที่เก็บเข้ากับโปรเจ็กต์
เรียกใช้คำสั่งต่อไปนี้เพื่อพิมพ์การกำหนดค่าที่เก็บเพื่อเพิ่มลงในโปรเจ็กต์ Java
gcloud artifacts print-settings mvn \
--repository=virtual-maven-repo \
--location=us-central1
แทนที่ทั้งส่วนที่เก็บใน pom ด้วยส่วนที่เก็บเสมือน 1 ส่วนจากเอาต์พุต
ตัวอย่าง: (ชื่อโปรเจ็กต์ของคุณจะแตกต่างกันใน URL)
...
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/virtual-maven-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
</build>
</project>
ดึงทรัพยากร Dependency จากที่เก็บเสมือน
เนื่องจากที่เก็บข้อมูลเสมือนเป็นแบบส่งผ่านและจะไม่จัดเก็บแพ็กเกจจริงใดๆ เพื่อแสดงกระบวนการอย่างชัดเจน คุณจะต้องลบที่เก็บ maven-central-cache ที่สร้างไว้ก่อนหน้านี้และสร้างใหม่เพื่อเริ่มต้นอีกครั้งด้วยที่เก็บข้อมูลที่ว่างเปล่า
เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างที่เก็บแคชขึ้นใหม่
gcloud artifacts repositories delete maven-central-cache \
--project=$PROJECT_ID \
--location=us-central1 \
--quiet
gcloud artifacts repositories create maven-central-cache \
--project=$PROJECT_ID \
--repository-format=maven \
--location=us-central1 \
--description="Remote repository for Maven Central caching" \
--mode=remote-repository \
--remote-repo-config-desc="Maven Central" \
--remote-mvn-repo=MAVEN-CENTRAL
คุณตรวจสอบที่เก็บที่ว่างเปล่าได้ในคอนโซล ไปที่ Cloud Console - Artifact Registry - ที่เก็บ
ตอนนี้ให้ฝึกใช้ที่เก็บข้อมูลเสมือนโดยสร้างโปรเจ็กต์ด้วยคำสั่งต่อไปนี้
rm -rf ~/.m2/repository
mvn compile
ตรวจสอบแพ็กเกจในคอนโซล
ไปที่ Cloud Console - Artifact Registry - ที่เก็บ คลิก maven-central-cache แล้วตรวจสอบว่าได้กำหนดค่าอาร์ติแฟกต์ไบนารีให้ดึงจากที่เก็บเสมือน แต่สุดท้ายแล้วดึงจาก maven-central-cache

5. ยินดีด้วย
ยินดีด้วย คุณทำ Codelab เสร็จแล้ว
สิ่งที่คุณได้พูดถึงไปแล้ว
- ใช้ที่เก็บมาตรฐานสำหรับการติดตั้งใช้งานแพ็กเกจส่วนตัว
- ใช้ที่เก็บระยะไกลเพื่อแคชแพ็กเกจ Maven Central
- ใช้ที่เก็บเสมือนเพื่อรวมที่เก็บต้นทางหลายรายการไว้ในการกำหนดค่าเดียว
ล้างข้อมูล
เรียกใช้คำสั่งต่อไปนี้เพื่อลบโปรเจ็กต์
gcloud projects delete ${PROJECT_ID}
—
อัปเดตล่าสุด: 22/3/23