نظرة متعمّقة على Artifact Registry

1. نظرة عامة

مع تطوُّر Container Registry، أصبح Artifact Registry مكانًا واحدًا لمؤسستك لإدارة حزم اللغات وصور الحاويات (مثل Maven وnpm). وهي تتكامل بشكل كامل مع أدوات وبيئات تشغيل Google Cloud وتتيح إدارة التبعية استنادًا إلى اللغة لاستخدامها مع أدوات مثل npm وMaven. سيجعل ذلك من السهل دمج هذه الأداة مع أدوات CI/CD لإعداد المسارات المبرمَجة.

يتضمّن هذا التمرين المعملي بعض الميزات المتوفّرة في Artifact Registry.

ما سوف تتعلمه

ما هي أهداف التعلُّم لهذا التمرين؟

  • إنشاء مستودعات للحاويات وحِزم اللغات
  • إدارة صور الحاويات باستخدام Artifact Registry
  • دمج Artifact Registry مع Cloud Code
  • إعداد Maven لاستخدام Artifact Registry لتبعيات Java

2. الإعداد والمتطلبات

إعداد بيئة ذاتية

  1. سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي عبارة عن سلسلة أحرف لا تستخدمها Google APIs، ويمكنك تحديثها في أي وقت.
  • يجب أن يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud وغير قابل للتغيير (لا يمكن تغييره بعد ضبطه). تنشئ Cloud Console سلسلة فريدة تلقائيًا. فعادةً لا تهتم بما هو. في معظم الدروس التطبيقية حول الترميز، يجب الرجوع إلى رقم تعريف المشروع (والذي يتم تحديده عادةً على أنّه PROJECT_ID). لذلك، إذا لم يعجبك، يمكنك إنشاء رقم تعريف عشوائي آخر أو يمكنك تجربة رقم تعريف المشروع الخاص بك ومعرفة ما إذا كان متاحًا. بعد ذلك تكون الحالة "مجمّدة". بعد إنشاء المشروع.
  • هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. اطّلِع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
  1. بعد ذلك، عليك تفعيل الفوترة في 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/

توفير البنية الأساسية المستخدمة في هذا التمرين المعملي

ستنشر في هذا التمرين المعملي رمزًا برمجيًا في GKE. يعمل النص البرمجي للإعداد أدناه على إعداد هذه البنية الأساسية من أجلك.

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

3- التعامل مع صور الحاويات

إنشاء مستودع Docker على سجلّ العناصر

يدعم Artifact Registry إدارة صور الحاويات وحِزم اللغات. تتطلب أنواع العناصر المختلفة مواصفات مختلفة. على سبيل المثال، تختلف طلبات تبعيات Maven عن طلبات تبعيات العُقد.

لإتاحة المواصفات المختلفة لواجهة برمجة التطبيقات، يحتاج 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 لمصادقة الطلبات إلى Artifact Registry في المنطقة us-central1.

gcloud auth configure-docker us-central1-docker.pkg.dev

سيظهَر الأمر لتأكيد تغيير إعداد Cloud Shell Docker، واضغط على Enter.

استكشاف نموذج التطبيق

يتوفر نموذج تطبيق في مستودع git الذي استنسخته في خطوة سابقة. التغيير إلى دليل جافا ومراجعة رمز التطبيق.

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 - المستودعات. انقر على container-dev-repo وتأكَّد من أنّ الصورة java-hello-world متوفّرة. انقر على الصورة ولاحظ الصورة التي تم وضع علامة tag1 عليها. يمكنك معرفة ما إذا كان "فحص الثغرات الأمنية" قيد التشغيل أو مكتملاً وأن عدد الثغرات المكتشَفة ظاهر.

9cb46d3689b3ed2.png

انقر على عدد الثغرات الأمنية وستظهر قائمة بالثغرات الأمنية المُكتشفة في الصورة، بالإضافة إلى اسم نشرة CVE وخطورة الاختراق، ويمكنك النقر على "عرض" في كل ثغرة أمنية مُدرجة للحصول على مزيد من التفاصيل:

2b17e9d26d9dd7ea.png

4. الدمج مع رمز السحابة الإلكترونية

في هذا القسم، سنتعرّف على كيفية استخدام مستودع صور Artifact Registry Docker مع رمز السحابة الإلكترونية.

نشر التطبيق في مجموعة GKE من رمز Cloud

نفِّذ الأمر التالي من المجلد "java-hello-world" لفتح "محرِّر Cloud Shell" وإضافة مجلد التطبيق إلى مساحة العمل الخاصة به:

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

انقر على شريط الحالة الخاص برمز السحابة الإلكترونية (في أسفل يمين الصفحة) ثم اختَر Run on Kubernetes.

e6e2b06467228e18.png

عندما يُطلب منك اختيار Yes لاستخدام السياق الحالي في kubeconfig الذي يشير إلى مجموعة GKE container-dev-cluster المخصّصة للدرس،

في طلب سجل الصور، ضع موقع العنوان الذي حددته قبل التأكد من استبدال <PROJECT_ID> للقيمة الفعلية

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

عند تنفيذ Run على Kubernetes لأول مرة، يطلب منك رمز Cloud Code موقع مستودع الصور المستهدف. بعد توفير عنوان URL للمستودع، يتم تخزينه في الملف .vscode/launch.json الذي يتم إنشاؤه في مجلد التطبيقات.

في جزء الإخراج، ستلاحظ أنّ عملية الإنشاء تبدأ لصورة التطبيق java-hello-world,. تم تحميل الصورة إلى مستودع Artifact Registry الذي تم ضبطه سابقًا.

الانتقال إلى Cloud Console - Artifact Registry - Repositories النقر على container-dev-repo والتحقّق من أنّ صورة java-hello-world والتعرّف على صورة جديدة تم وضع علامة latest عليها

مراجعة التطبيق الذي تم نشره

الرجوع إلى محرِّر Cloud Shell: عند اكتمال النشر، سيطبع Skaffold/Cloud Code عنوان URL الذي تم الكشف عنه حيث تمت إعادة توجيه الخدمة، وانقر على الرابط - Open Web Preview:

33257a43826b88ff.png

في نافذة المتصفح الجديدة، ستظهر لك صفحة تطبيق hello world

d3e49693b0383a5d.png

تحديث رمز التطبيق

يمكنك الآن تحديث التطبيق لرؤية التغيير الذي تم تنفيذه فورًا في عملية النشر على المجموعة:

افتح HelloWorldController.java في المجلد "src/main/java/cloudcode/helloworld/web" في "محرِّر Cloud Shell".

غيّر النص في الصف 20 من "إنه قيد التشغيل!" إلى "تم تحديثه!"، يجب أن ترى عملية الإنشاء والنشر تبدأ على الفور.

في نهاية عملية النشر، انقر مرة أخرى على عنوان URL الذي تمت إعادة توجيهه أو أعِد تحميل نافذة المتصفح بالتطبيق للاطّلاع على التغيير الذي أجريته:

41787b1da54ff137.png

مرة أخرى، انتقِل إلى Cloud Console - Artifact Registry - Repositories انقر على container-dev-repo وتأكَّد من أنّ الصورة java-hello-world ودوّن الصورة الجديدة.

5- العمل على حزم اللغات

ستتعرَّف في هذا القسم على كيفية إعداد مستودع Artifact Registry Java وتحميل الحِزم إليه والاستفادة منها في تطبيقات مختلفة.

إنشاء مستودع حزمة 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. إذا نقرت عليه، سيظهر أنّه فارغ في الوقت الحالي.

إعداد المصادقة في "مستودع العناصر"

استخدِم الأمر التالي لتعديل الموقع المعروف لـ "بيانات الاعتماد التلقائية للتطبيق" (ADC) باستخدام بيانات اعتماد حساب المستخدم كي يتمكّن مساعد بيانات اعتماد Artifact Registry من المصادقة على استخدامها عند الاتصال بالمستودعات:

gcloud auth login --update-adc

إعداد Maven for Artifact Registry

شغّل الأمر التالي لطباعة تهيئة المستودع لإضافته إلى مشروع Java:

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

افتح ملف pom.xml في محرِّر Cloud Shell وأضف الإعدادات المعروضة إلى الأقسام المناسبة في الملف.

تعديل قسم 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 Java لاستخدامها في مشاريع أخرى في مؤسستك.

شغّل الأمر التالي لتحميل حزمة Java إلى Artifact Registry:

mvn deploy

التحقق من حزمة Java في Artifact Registry

انتقِل إلى Cloud Console - Artifact Registry - المستودعات انقر على container-dev-java-repo وتأكَّد من توفّر العنصر الثنائي لنظام التشغيل hello-world:

e348d976ac1ac107.png

6- تهانينا!

تهانينا، لقد أنهيت الدرس التطبيقي حول الترميز.

المواضيع التي شملتها

  • المستودعات التي تم إنشاؤها للحاويات وحزم اللغات
  • صور الحاويات المُدارة باستخدام Artifact Registry
  • خدمة Artifact Registry المدمجة مع رمز Cloud
  • تم إعداد Maven لاستخدام Artifact Registry لتبعيات Java.

تنظيف

قم بتشغيل الأمر التالي لحذف المشروع

gcloud projects delete $PROJECT_ID