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



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

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

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


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

פותחים את הטרמינל מ-Cloud Shell Editor ומריצים את הפקודה הבאה כדי להדפיס את הגדרות המאגר שצריך להוסיף לפרויקט Java:
gcloud artifacts print-settings mvn \
--repository=container-dev-java-repo \
--location=us-central1
מוסיפים את ההגדרות שמוחזרות לקטעים המתאימים בקובץ pom.xml.
תצוגת Cloud 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 כדי לאחסן קובצי JAR של Java לשימוש בפרויקטים אחרים בארגון.
מריצים את הפקודה הבאה כדי להעלות את חבילת Java אל Artifact Registry:
mvn deploy
בדיקת חבילת Java ב-Artifact Registry
עוברים אל Cloud Console - Artifact Registry - Repositories. לוחצים על container-dev-java-repo ומוודאים שפריט המידע הבינארי hello-world נמצא שם:

5. מעולה!
כל הכבוד, סיימתם את ה-Codelab!
מה נכלל
- מאגרי מידע שנוצרו לקונטיינרים ולחבילות שפה
- תמונות קונטיינרים מנוהלות באמצעות Artifact Registry
- הגדרת Maven לשימוש ב-Artifact Registry ליחסי תלות של Java
הסרת המשאבים
מריצים את הפקודה הבאה כדי למחוק את הפרויקט
gcloud projects delete $PROJECT_ID