1. نظرة عامة
Artifact Registry هو تطوّر لخدمة Container Registry، وهو مكان واحد يمكن لمؤسستك من خلاله إدارة صور الحاويات وحِزم اللغات (مثل Maven وnpm). وهي تتكامل بشكل كامل مع أدوات Google Cloud وبيئات التشغيل، وتتضمّن إمكانية إدارة التبعيات المستندة إلى اللغة لاستخدامها مع أدوات مثل npm وMaven. يسهّل ذلك دمجها مع أدوات التكامل المستمر/التسليم المستمر لإعداد عمليات آلية.
سيرشدك هذا الدرس التطبيقي إلى بعض الميزات المتوفّرة في Artifact Registry.
ما ستتعلمه
ما هي أهداف التعلّم من هذا الدرس التطبيقي؟
- إنشاء مستودعات للحاويات وحِزم اللغات
- إدارة صور الحاويات باستخدام Artifact Registry
- ضبط Maven لاستخدام Artifact Registry في الاعتمادات على Java
2. الإعداد والمتطلبات
إعداد البيئة بوتيرة ذاتية
- سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.



- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديله في أي وقت.
- رقم تعريف المشروع هو معرّف فريد في جميع مشاريع Google Cloud ولا يمكن تغييره بعد ضبطه. تنشئ Cloud Console تلقائيًا سلسلة فريدة، ولا يهمّك عادةً ما هي. في معظم دروس البرمجة، عليك الرجوع إلى رقم تعريف المشروع (يتم تحديده عادةً على أنّه
PROJECT_ID). إذا لم يعجبك رقم التعريف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. يمكنك بدلاً من ذلك تجربة اسم مستخدم من اختيارك لمعرفة ما إذا كان متاحًا. لا يمكن تغيير هذا الخيار بعد هذه الخطوة وسيظل ساريًا طوال مدة المشروع. - للعلم، هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. يمكنك الاطّلاع على مزيد من المعلومات عن كل هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد/واجهات برمجة تطبيقات 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
الحصول على رمز المصدر
يتوفّر الرمز المصدر لهذا المختبر في مؤسسة GoogleCloudPlatform على GitHub. استنسِخه باستخدام الأمر أدناه، ثم انتقِل إلى الدليل.
git clone https://github.com/GoogleCloudPlatform/cloud-code-samples/
3- العمل باستخدام صور الحاويات
إنشاء مستودع Docker على Artifact Registry
تتيح خدمة Artifact Registry إدارة صور الحاويات وحِزم اللغات. تتطلّب أنواع العناصر المختلفة مواصفات مختلفة. على سبيل المثال، تختلف طلبات تبعيات Maven عن طلبات تبعيات Node.
لإتاحة مواصفات واجهة برمجة التطبيقات المختلفة، يجب أن يعرف Artifact Registry التنسيق الذي تريد أن تتّبعه الردود من واجهة برمجة التطبيقات. لإجراء ذلك، عليك إنشاء مستودع وتمرير العلامة --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
انتقِل إلى Google Cloud Console - 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
سيطلب منك الأمر تأكيد تغيير إعدادات Cloud Shell docker، لذا اضغط على 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
انتقِل إلى Google Cloud Console - Artifact Registry - المستودعات ولاحظ مستودع Maven الذي أنشأته حديثًا باسم container-dev-java-repo. إذا نقرت عليه، ستلاحظ أنّه فارغ في الوقت الحالي.
إعداد المصادقة في Artifact Repository
استخدِم الأمر التالي لتعديل الموقع المعروف لبيانات الاعتماد التلقائية للتطبيق (ADC) باستخدام بيانات اعتماد حساب المستخدم حتى يتمكّن مساعد بيانات اعتماد Artifact Registry من المصادقة باستخدامها عند الربط بالمستودعات:
gcloud auth login --update-adc
ضبط Maven لخدمة Artifact Registry
نفِّذ الأمر التالي من مجلد java-hello-world لفتح Cloud Shell Editor وإضافة مجلد التطبيق إلى مساحة عمله:
cloudshell workspace .
فعِّل ملفات تعريف الارتباط الخارجية من خلال النقر على "هل يعمل الموقع الإلكتروني الآن؟" ثم على "السماح بملفات تعريف الارتباط".
بعد إعادة تحميل المتصفّح، افتح Cloud Shell ونفِّذ الأمر أعلاه مرة أخرى لتحميل مجلد التطبيق.


افتح ملف pom.xml في "محرِّر Cloud Shell"، ثم انقر على "فتح المحرِّر".

افتح الوحدة الطرفية من "محرّر Cloud Shell" ونفِّذ الأمر التالي لطباعة إعدادات المستودع التي ستتم إضافتها إلى مشروع 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>
<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 - المستودعات. انقر على container-dev-java-repo وتأكَّد من توفّر العنصر الثنائي hello-world:

5- تهانينا!
تهانينا، لقد أكملت درس البرمجة.
المواضيع التي تناولناها
- إنشاء مستودعات للحاويات وحِزم اللغات
- صور الحاويات المُدارة باستخدام Artifact Registry
- ضبط Maven لاستخدام Artifact Registry في عمليات الربط بين حِزم Java
تنظيف
نفِّذ الأمر التالي لحذف المشروع.
gcloud projects delete $PROJECT_ID