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 ของระบบคลาวด์ การใช้งาน 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)')
เปิดใช้ 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 ของโปรเจ็กต์
- ส่วนที่เก็บจะระบุตำแหน่งที่ Maven สามารถดาวน์โหลดอาร์ติแฟกต์ระยะไกลเพื่อใช้กับโปรเจ็กต์ปัจจุบัน
- ส่วน distributionManagement จะระบุที่เก็บระยะไกลที่โปรเจ็กต์จะพุชไปเมื่อทำให้ใช้งานได้
- ส่วน extensions จะเพิ่ม artifactregistry-maven-wagon ซึ่งจะเปิดใช้การตรวจสอบสิทธิ์และเลเยอร์การรับส่งข้อมูลที่จำเป็นสำหรับการเชื่อมต่อกับ Artifact Registry
- หมายเหตุ: ส่วนขยายอยู่ใน pom.xml หรือ extensions.xml ได้ ในกรณีที่โปรเจ็กต์ต้องพึ่งพาโปรเจ็กต์ระดับบนสุด ระบบจะเข้าถึงทรัพยากร Dependency เหล่านั้นก่อนโหลดรายการที่เหลือใน pom.xml เพื่อให้มั่นใจว่าผู้เผยแพร่โฆษณาหลักมีสิทธิ์เข้าถึงส่วนขยาย สามารถวางส่วนขยายดังกล่าวในไฟล์ extensions.xml ที่โหลดก่อน pom.xml ทำให้ใช้งานกับทรัพยากร Dependency ระดับบนสุดได้
คัดลอกทั้ง 3 ส่วนแล้วเปิด pom.xml
ใน Cloud Shell Editor แล้วเพิ่มการตั้งค่าที่แสดงผลที่ด้านล่างของไฟล์ภายในแท็กปิด project
เคล็ดลับ: ใน Cloudshell ให้เรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัลเพื่อเปิดตัวแก้ไขในไดเรกทอรีปัจจุบัน
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 เพื่อจัดเก็บ Java jar สำหรับโครงการอื่นๆ ในองค์กรไว้ใช้
เรียกใช้คำสั่งต่อไปนี้เพื่ออัปโหลดแพ็กเกจ 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 จะสามารถแปลงทรัพยากร 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 - 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