إدارة التبعية باستخدام Artifact Registry

1. نظرة عامة

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

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

ما سوف تتعلمه

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

  • إنشاء مستودعات للحاويات وحِزم اللغات
  • إدارة صور الحاويات باستخدام Artifact Registry
  • إعداد 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/

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 - Repositories ولاحظ مستودع 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 وخطورة الاختراق، ويمكنك النقر على "عرض" في كل ثغرة أمنية مُدرجة للحصول على مزيد من التفاصيل:

c2a961e6218d5a45.png

4. العمل على حزم اللغات

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

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

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

gcloud auth login --update-adc

إعداد Maven for Artifact Registry

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

cloudshell workspace .

هل تريد تفعيل ملفات تعريف الارتباط التابعة لجهات خارجية من خلال النقر على "هل يعمل الموقع الإلكتروني الآن؟" ثم "السماح بملفات تعريف الارتباط".

بعد إعادة تحميل المتصفِّح، افتح Cloud Shell ونفِّذ الأمر أعلاه مرة أخرى لتحميل مجلد التطبيق.

62328383ea59b30c.png

a9d756bf08575b0d.png

افتح pom.xml في محرِّر Cloud Shell، وانقر على Open Editor (فتح المحرِّر).

95d98e831787b2ff.png

افتح الوحدة الطرفية من محرِّر Cloud Shell وشغِّل الأمر التالي لطباعة إعدادات المستودع لإضافته إلى مشروع 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>
   <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

5- تهانينا!

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

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

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

تنظيف

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

gcloud projects delete $PROJECT_ID