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

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

Artifact Registry הוא מקום מרכזי שבו הארגון יכול לנהל קובצי אימג' של קונטיינרים וחבילות שפה (כמו Maven ו-npm). הוא מהווה התפתחות של Container Registry. הוא משולב באופן מלא עם כלי זמן הריצה של 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

  • שם הפרויקט הוא השם המוצג של הפרויקט הזה למשתתפים. זו מחרוזת תווים שלא נמצאת בשימוש ב-Google APIs. אפשר לעדכן את המיקום הזה בכל שלב.
  • מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו אחרי שהוא מוגדר. מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית, ובדרך כלל לא צריך לדעת מה היא. ברוב ה-Codelabs, תצטרכו להפנות למזהה הפרויקט (בדרך כלל הוא מסומן כ-PROJECT_ID). אם אתם לא אוהבים את המזהה שנוצר, אתם יכולים ליצור מזהה אקראי אחר. אפשר גם לנסות שם משתמש משלכם ולבדוק אם הוא זמין. אי אפשר לשנות את ההגדרה הזו אחרי השלב הזה, והיא תישאר כזו למשך הפרויקט.
  • לידיעתכם, יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. במאמרי העזרה מפורט מידע נוסף על שלושת הערכים האלה.
  1. בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API של Cloud. העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי אפילו לא תצטרכו לשלם בכלל. כדי להשבית את המשאבים ולא לחייב אתכם מעבר למדריך הזה, אתם יכולים למחוק את המשאבים שיצרתם או למחוק את כל הפרויקט. משתמשים חדשים ב-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

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

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

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

3. עבודה עם תמונות קונטיינרים

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

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

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

כדי לאחסן קובצי אימג' של קונטיינרים ב-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 Console - Artifact Registry - Repositories. לוחצים על container-dev-repo ומוודאים שקובץ האימג' java-hello-world נמצא שם. לוחצים על התמונה ומסתכלים על התמונה שתויגה בתווית tag1. אפשר לראות שסריקת הפגיעויות פועלת או שכבר הושלמה, ומוצג מספר הפגיעויות שזוהו.

9cb46d3689b3ed2.png

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

c2a961e6218d5a45.png

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

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

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

מריצים את הפקודה הבאה ב-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, לוחצים על Authorize (אישור).

עוברים אל מסוף Google Cloud - 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-hello-world כדי לפתוח את Cloud Shell Editor ולהוסיף את תיקיית האפליקציה לסביבת העבודה:

cloudshell workspace .

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

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

62328383ea59b30c.png

a9d756bf08575b0d.png

פותחים את הקובץ pom.xml ב-Cloud Shell Editor ולוחצים על Open 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 כדי לאחסן קובצי JAR של Java לשימוש בפרויקטים אחרים בארגון.

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

mvn deploy

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

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

e348d976ac1ac107.png

5. מעולה!

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

מה נכלל

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

הסרת המשאבים

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

gcloud projects delete $PROJECT_ID