ניהול תלות באמצעות Artifact Registry

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

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

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

מה תלמדו

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

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

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 בכל נקודת חולשה כדי לקבל פרטים נוספים:

c2a961e6218d5a45.png

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

בחלק הזה נסביר איך מגדירים מאגר של 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

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

cloudshell workspace .

כדי להפעיל קובצי Cookie של צד שלישי, לוחצים על האפשרות 'האתר פועל עכשיו?' ואז על 'אפשר קובצי cookie'.

אחרי שהדפדפן ייטען מחדש, פותחים את Cloud Shell ומריצים את הפקודה שמעל פעם נוספת כדי לטעון את תיקיית האפליקציה.

62328383ea59b30c.png

a9d756bf08575b0d.png

פותחים את קובץ pom.xml ב-Cloud Shell Editor ולוחצים על 'פתיחת העורך'

95d98e831787b2ff.png

פותחים את הטרמינל מ-Cloud Shell Editor ומריצים את הפקודה הבאה כדי להדפיס את הגדרות המאגר ולהוסיף אותן לפרויקט Java:

gcloud artifacts print-settings mvn \
    --repository=container-dev-java-repo \
    --location=us-central1

ומוסיפים את ההגדרות שהוחזרו לקטעים המתאימים בקובץ pom.xml.

תצוגת Cloud Editor עם טרמינל מובנה:

33c3bfa412b7babd.png

מעדכנים את הקטע 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

5. מעולה!

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

מה נכלל

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

הסרת המשאבים

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

gcloud projects delete $PROJECT_ID