1. ภาพรวม
อาร์ติแฟกต์รีจิสทรีช่วยให้คุณจัดเก็บอาร์ติแฟกต์ประเภทต่างๆ สร้างที่เก็บข้อมูลหลายแห่งในโปรเจ็กต์เดียว และเชื่อมโยงภูมิภาคที่เฉพาะเจาะจงหรือหลายภูมิภาคกับที่เก็บข้อมูลแต่ละแห่งได้ โหมดที่เก็บข้อมูลมีหลายโหมด โดยแต่ละโหมดมีจุดประสงค์การใช้งานแตกต่างกัน แผนภาพต่อไปนี้แสดงวิธีใช้ที่เป็นไปได้เพียงวิธีหนึ่งในการใช้ที่เก็บข้อมูลในโหมดต่างๆ ร่วมกัน แผนภาพแสดงเวิร์กโฟลว์ในโปรเจ็กต์ Google Cloud 2 รายการ นักพัฒนาซอฟต์แวร์จะสร้างแอปพลิเคชัน Java ในโปรเจ็กต์การพัฒนา ในโปรเจ็กต์รันไทม์แยกต่างหาก บิลด์อื่นจะสร้างอิมเมจคอนเทนเนอร์ที่มีแอปพลิเคชันสำหรับการทำให้ใช้งานได้ใน Google Kubernetes Engine
ในบทแนะนำนี้ คุณจะได้เรียนรู้วิธีทํางานต่อไปนี้
- ใช้ที่เก็บข้อมูลมาตรฐานเพื่อทำให้แพ็กเกจส่วนตัวใช้งานได้
- ใช้ที่เก็บระยะไกลเพื่อแคชแพ็กเกจ Maven Central
- ใช้ที่เก็บข้อมูลเสมือนเพื่อรวมที่เก็บข้อมูลต้นทางหลายแห่งในการกําหนดค่าเดียว
การตั้งค่าสภาพแวดล้อมด้วยตนเอง
- ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
- ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ โดยคุณจะอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์จะต้องไม่ซ้ำกันสำหรับโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) คอนโซล Cloud จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นจะเป็นอะไร ในโค้ดแล็บส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น
PROJECT_ID
) หากไม่ชอบรหัสที่สร้างขึ้น คุณก็สร้างรหัสอื่นแบบสุ่มได้ หรือจะลองใช้อุปกรณ์ของคุณเองเพื่อดูว่าฟีเจอร์นี้พร้อมใช้งานหรือไม่ก็ได้ คุณจะเปลี่ยนแปลงชื่อหลังจากขั้นตอนนี้ไม่ได้ และชื่อจะคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - โปรดทราบว่ามีค่าที่ 3 ซึ่งเป็นหมายเลขโปรเจ็กต์ที่ API บางรายการใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 รายการนี้ได้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตามโค้ดแล็บนี้ไม่น่าจะเสียค่าใช้จ่ายมากนัก หากต้องการปิดใช้ทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินหลังจากบทแนะนำนี้ คุณก็ลบทรัพยากรที่สร้างไว้หรือลบทั้งโปรเจ็กต์ได้ ผู้ใช้ใหม่ของ 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 Console - Artifact Registry - Repositories และดูที่เก็บ 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 ของโปรเจ็กต์
- ส่วน repositories จะระบุตำแหน่งที่ Maven อาจดาวน์โหลดอาร์ติแฟกต์ระยะไกลเพื่อใช้ในโปรเจ็กต์ปัจจุบัน
- ส่วน distributionManagement จะระบุที่เก็บระยะไกลที่โปรเจ็กต์จะพุชเมื่อมีการนำไปใช้งาน
- ส่วน extensions จะเพิ่ม artifactregistry-maven-wagon ซึ่งเปิดใช้ชั้นการตรวจสอบสิทธิ์และชั้นนำส่งที่จําเป็นสําหรับการเชื่อมต่อกับ Artifact Registry
- หมายเหตุ: ส่วนขยายอาจอยู่ใน pom.xml หรือ extensions.xml ในกรณีที่โปรเจ็กต์ใช้โปรเจ็กต์หลัก ระบบจะเข้าถึงทรัพยากรเหล่านั้นก่อนที่จะโหลดรายการอื่นๆ ใน pom.xml คุณสามารถวางส่วนขยายไว้ในไฟล์ extensions.xml ซึ่งจะโหลดก่อน pom.xml เพื่อให้ส่วนขยายพร้อมใช้งานสำหรับข้อกำหนดของส่วนกลางได้ เพื่อให้มั่นใจว่าส่วนกลางจะมีสิทธิ์เข้าถึงส่วนขยาย
คัดลอก 3 ส่วน แล้วเปิด pom.xml
ในเครื่องมือแก้ไข Cloud Shell และเพิ่มการตั้งค่าที่แสดงผลไว้ที่ด้านล่างของไฟล์ภายในแท็ก 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 - Repositories คลิก 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 - Repositories คลิก 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 แก้ปัญหาการพึ่งพาของพร็อพเพอร์ตี้หลักหรือปลั๊กอินจากที่เก็บอาร์ติแฟกต์ได้
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 - Repositories คลิก maven-central-cache
แล้วตรวจสอบว่าอาร์ติแฟกต์ไบนารีที่แคชไว้มีดังนี้
4. ที่เก็บเสมือน
ที่เก็บข้อมูลเสมือนทำหน้าที่เป็นอินเทอร์เฟซสำหรับการเข้าถึงที่เก็บข้อมูลหลายแห่งผ่านการกําหนดค่าครั้งเดียว ซึ่งจะลดความซับซ้อนในการกําหนดค่าไคลเอ็นต์สําหรับผู้ใช้อาร์ติแฟกต์และเพิ่มความปลอดภัยด้วยการลดการโจมตีแบบความสับสนเกี่ยวกับ Dependency
สร้างไฟล์นโยบาย
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 - Repositories
ตอนนี้ให้ทดสอบที่เก็บข้อมูลเสมือนโดยสร้างโปรเจ็กต์ด้วยคำสั่งต่อไปนี้
rm -rf ~/.m2/repository
mvn compile
ตรวจสอบแพ็กเกจในคอนโซล
ไปที่ Cloud Console - Artifact Registry - Repositories คลิก maven-central-cache
แล้วตรวจสอบว่ามีการกําหนดค่าอาร์ติแฟกต์ไบนารีให้ดึงมาจากที่เก็บข้อมูลเสมือน แต่ดึงมาจาก maven-central-cache
ในท้ายที่สุด
5. ยินดีด้วย
ยินดีด้วย คุณทำ Codelab เสร็จแล้ว
สิ่งที่คุณครอบคลุม
- ใช้ที่เก็บข้อมูลมาตรฐานเพื่อทำให้แพ็กเกจส่วนตัวใช้งานได้
- ใช้ที่เก็บระยะไกลเพื่อแคชแพ็กเกจ Maven Central
- ใช้ที่เก็บข้อมูลเสมือนเพื่อรวมที่เก็บข้อมูลต้นทางหลายแห่งในการกําหนดค่าเดียว
ล้างข้อมูล
เรียกใช้คำสั่งต่อไปนี้เพื่อลบโปรเจ็กต์
gcloud projects delete ${PROJECT_ID}
—
อัปเดตล่าสุด: 22/3/23