סקירה מפורטת של Artifact Registry

1. סקירה כללית

במסגרת ההתפתחות של Container Registry, Artifact Registry הוא מקום מרכזי לניהול קובצי אימג' של קונטיינרים וחבילות שפה (כמו Maven ו-npm). הוא משתלב בצורה מלאה בכלים ובזמני הריצה של Google Cloud, והוא כולל תמיכה בניהול יחסי תלות מבוסס-שפה לשימוש בכלים כמו npm ו-Maven. כך אפשר לשלב אותו בקלות עם כלי ה-CI/CD כדי להגדיר צינורות עיבוד נתונים אוטומטיים.

בשיעור ה-Lab הזה תלמדו על כמה תכונות שזמינות ב-Artifact Registry.

מה תלמדו

מה מטרת הלמידה בשיעור ה-Lab הזה?

  • יצירת מאגרים לקונטיינרים ולחבילות שפות
  • ניהול תמונות קונטיינרים באמצעות Artifact Registry
  • שילוב Artifact Registry עם Cloud Code
  • הגדרת Maven לשימוש ב-Artifact Registry של יחסי תלות של Java

2. הגדרה ודרישות

הגדרת סביבה בקצב אישי

  1. נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא נעשה בה שימוש ב-Google APIs, ואפשר לעדכן אותה בכל שלב.
  • Project ID חייב להיות ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-Codelabs תצטרכו להפנות אל מזהה הפרויקט (ובדרך כלל הוא מזוהה כ-PROJECT_ID), כך שאם הוא לא מוצא חן בעיניכם, תוכלו ליצור פרויקט אקראי אחר או לנסות בעצמכם ולבדוק אם הוא זמין. ואז המכשיר 'קפוא' לאחר יצירת הפרויקט.
  • יש ערך שלישי, Project Number, שחלק מממשקי ה-API משתמשים בו. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
  1. בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או בממשקי API של Cloud. מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. כדי להשבית את המשאבים ולא לצבור חיובים מעבר למדריך הזה, פועלים לפי ההנחיות למחיקת המשאבים. בסוף ה-Codelab. משתמשים חדשים ב-Google Cloud זכאים להצטרף לתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.

הגדרת 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

קבלת קוד המקור

קוד המקור של שיעור ה-Lab הזה נמצא בארגון GoogleCloudPlatform ב-GitHub. משכפלים באמצעות הפקודה שלמטה ומשנים את שם הספרייה.

git clone https://github.com/GoogleCloudPlatform/cloud-code-samples/

הקצאת התשתית שבה נעשה שימוש בשיעור ה-Lab הזה

בשיעור ה-Lab הזה תפרסו קוד ל-GKE. סקריפט ההגדרה שבהמשך מכין את התשתית הזו עבורכם.

gcloud container clusters create container-dev-cluster --zone=us-central1-b

3. עבודה עם קובצי אימג' של קונטיינרים

יצירת מאגר Docker במרשם של Artifact

Artifact Registry תומך בניהול קובצי אימג' של קונטיינרים וחבילות שפה. לסוגים שונים של ארטיפקטים נדרשים מפרטים שונים. לדוגמה, הבקשות ליחסי תלות של Maven שונות מבקשות ליחסי תלות של Node.

כדי לתמוך במפרטי ה-API השונים, ב-Artifact Registry אתם צריכים לדעת באיזה פורמט תרצו שתגובות ה-API יפעלו. לשם כך תיצרו מאגר ותעבירו אותו בדגל --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, לוחצים על Authorize (אישור).

נכנסים למסוף Google Cloud – Artifact Registry – מאגרים ורואים את המאגר החדש של Docker שנקרא container-dev-repo. אם תלחצו עליו הוא יהיה ריק כרגע.

הגדרת אימות Docker ל-Artifact Registry

כשמתחברים ל-Artifact Registry, צריך להזין פרטי כניסה כדי לתת גישה. במקום להגדיר פרטי כניסה נפרדים, אפשר להגדיר ל-Docker להשתמש בפרטי הכניסה ל-gcloud בצורה חלקה.

ב-Cloud Shell, מריצים את הפקודה הבאה כדי להגדיר את Docker לשימוש ב-Google Cloud CLI כדי לאמת בקשות ל-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 לדוגמה שמעבדת דף אינטרנט פשוט: בנוסף לקבצים שונים שלא רלוונטיים לשיעור ה-Lab הספציפי הזה, היא מכילה את קוד המקור בתיקייה src וקובץ Docker שבו נשתמש כדי לפתח קובץ אימג' בקונטיינר באופן מקומי.

יצירת קובץ האימג' של הקונטיינר

כדי לאחסן תמונות של קונטיינרים ב-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

נכנסים אל מסוף Google Cloud – Artifact Registry – מאגרים. לוחצים על container-dev-repo ובודקים שהתמונה java-hello-world מופיעה שם. לוחצים על התמונה ומעיינים בתמונה שתייגה tag1. ניתן לראות שסריקת נקודות החולשה פועלת או שכבר הושלמה, ומספר נקודות החולשה שזוהו גלוי.

9cb46d3689b3ed2.png

ניתן ללחוץ על מספר נקודות החולשה כדי להציג את רשימת נקודות החולשה שזוהו בתמונה. רשימת נקודות החולשה שזוהו בתמונה עם מידע נוסף על כך. ניתן ללחוץ על VIEW בכל נקודת חולשה כדי לקבל פרטים נוספים:

2b17e9d26d9dd7ea.png

4. שילוב באמצעות Cloud Code

בקטע הזה נסביר איך להשתמש במאגר התמונות של Docker ב-Artifact Registry עם Cloud Code.

פריסת האפליקציה לאשכול GKE מ-Cloud Code

כדי לפתוח את Cloud Shell Editor ולהוסיף את תיקיית האפליקציה לסביבת העבודה שלו, מריצים את הפקודה הבאה מהתיקייה java-hello-world:

cloudshell workspace .

העורך של Cloud Shell ייפתח כשהכלי Explorer בתיקיית האפליקציות.

אם מופיע חלון קופץ עם בקשה להחריג קובצי הגדרות של פרויקט ב-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.

e6e2b06467228e18.png

כשתוצג הנחיה לבחור ב-Yes להשתמש בהקשר הנוכחי ב-kubeconfig שמפנה לאשכול GKE container-dev-cluster שהוקצה לשיעור ה-Lab

בהודעה שמופיעה במרשם התמונות, צריך לציין את מיקום הכתובת לפני שמוודאים שמחליפים את <PROJECT_ID> לפי הערך האמיתי

us-central1-docker.pkg.dev/<PROJECT_ID>/container-dev-repo

כשמפעילים את 'הרצה ב-Kubernetes' בפעם הראשונה, מופיעה בקשה מ-Cloud Code למיקום היעד של מאגר התמונות. כתובת ה-URL של המאגר תאוחסן בקובץ .vscode/launch.json שנוצר בתיקיית האפליקציות.

בחלונית הפלט רואים שה-build מתחיל עבור קובץ האימג' של האפליקציה java-hello-world,. התמונה הועלתה למאגר Artifact Registry שהוגדר קודם

נכנסים אל Cloud Console – Artifact Registry – מאגרים לוחצים על container-dev-repo ובודקים שהתמונה java-hello-world ומופיעה בתמונה חדשה עם תיוג latest

בדיקת האפליקציה הפרוסה

חוזרים אל Cloud Shell Editor: בסיום הפריסה, Skaffold/Cloud Code ידפיס את כתובת ה-URL החשופה שאליה הועבר השירות, לוחצים על הקישור – פתיחת תצוגה מקדימה באינטרנט:

33257a43826b88ff.png

בחלון הדפדפן החדש תראו את הדף של אפליקציית hello World.

d3e49693b0383a5d.png

עדכון קוד האפליקציה

עכשיו מעדכנים את האפליקציה כדי שהשינוי מיושם באופן מיידי בפריסה באשכול:

פותחים את הקובץ HelloWorldController.java בתיקייה src/main/java/cloudcode/helloworld/web ב-Cloud Shell Editor.

משנים את הטקסט בשורה 20 מ"הוא פועל!" ל-"It's updated!", תהליך ה-build והפריסה אמור להתחיל מיד.

בסוף הפריסה, לוחצים שוב על כתובת ה-URL שמועברת או מרעננים את חלון הדפדפן עם האפליקציה כדי לראות את השינוי נפרס:

41787b1da54ff137.png

שוב, נכנסים אל מסוף Cloud – Artifact Registry – מאגרים, לוחצים על container-dev-repo ובודקים שהתמונה java-hello-world מופיעה ומופיעה תמונה חדשה

5. עבודה עם חבילות שפה

בחלק הזה נסביר איך מגדירים מאגר של Artifact Registry Java ומעלים אליו חבילות, ומשתמשים בהן באפליקציות שונות.

יצירת מאגר של חבילות Java

כדי ליצור מאגר ארטיפקטים של Java, מריצים את הפקודה הבאה ב-Cloud Shell:

gcloud artifacts repositories create container-dev-java-repo \
    --repository-format=maven \
    --location=us-central1 \
    --description="Java package repository for Container Dev Workshop"

אם מופיעה בקשת ההרשאה של Cloud Shell, לוחצים על Authorize (אישור).

נכנסים למסוף Google Cloud – Artifact Registry – מאגרים, ומחפשים את המאגר החדש ב-Maven שנקרא container-dev-java-repo. אם תלחצו עליו הוא יהיה ריק כרגע.

הגדרת אימות ב-Artifact Repository

אפשר להשתמש בפקודה הבאה כדי לעדכן את המיקום הידוע של Application Default Credentials (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 לשימוש בפרויקטים אחרים בארגון.

מריצים את הפקודה הבאה כדי להעלות את חבילת ה-Java ל-Artifact Registry:

mvn deploy

בדיקה של חבילת Java ב-Artifact Registry

עוברים אל מסוף Cloud – Artifact Registry – מאגרים לוחצים על container-dev-java-repo ובודקים שהארטיפקט הבינארי hello-world נמצא שם:

e348d976ac1ac107.png

6. מעולה!

כל הכבוד, סיימת את ה-Codelab!

מה נכלל

  • מאגרים שנוצרו עבור קונטיינרים וחבילות שפה
  • קובצי אימג' של קונטיינרים מנוהלים באמצעות Artifact Registry
  • Artifact Registry משולב עם Cloud Code
  • הגדרת ב-Maven לשימוש ב-Artifact Registry של יחסי תלות של Java

הסרת המשאבים

מריצים את הפקודה הבאה כדי למחוק את הפרויקט.

gcloud projects delete $PROJECT_ID