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

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

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

במדריך הזה נסביר על כמה מהתכונות הזמינות ב-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

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

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

הקצאת התשתית שבה נעשה שימוש במעבדה הזו

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

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

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

יצירת מאגר Docker ב-Artifact Registry

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

כדי לתמוך במפרטי ה-API השונים, ב-Artifact Registry אתם צריכים לדעת באיזה פורמט תרצו שתגובות ה-API יפעלו. כדי לעשות זאת, יוצרים מאגר ומעבירים את הדגל --repository-format שמציין את סוג המאגר הרצוי.

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

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 – Repositories ומאתרים את מאגר 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

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

2b17e9d26d9dd7ea.png

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.

e6e2b06467228e18.png

כשמופיעה ההודעה, בוחרים באפשרות Yes כדי להשתמש בהקשר הנוכחי ב-kubeconfig שמצביע על אשכול GKE‏ container-dev-cluster שהוקצה לסדנה.

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

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

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

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

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

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

חוזרים ל-Cloud Shell Editor: כשהפריסה תושלם, Skaffold/Cloud Code ידפיסו את כתובת ה-URL החשופה שבה השירות הועבר. לוחצים על הקישור – Open Web Preview:

33257a43826b88ff.png

בחלון הדפדפן החדש יוצג הדף של אפליקציית hello world

d3e49693b0383a5d.png

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

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

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

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

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

41787b1da54ff137.png

שוב נכנסים אל Cloud Console - Artifact Registry - Repositories לוחצים על container-dev-repo ובודקים את קובץ האימג' java-hello-world ומתעדים את קובץ האימג' החדש.

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

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

יצירת מאגר חבילות 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 Console – Artifact Registry – Repositories ומאתרים את מאגר 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 Jar לשימוש בפרויקטים אחרים בארגון.

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

mvn deploy

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

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

e348d976ac1ac107.png

6. מעולה!

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

מה נכלל

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

הסרת המשאבים

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

gcloud projects delete $PROJECT_ID