1. نظرة عامة
مع تطوّر Container Registry، أصبح Artifact Registry مكانًا واحدًا لمؤسستك لإدارة صور الحاويات وحِزم اللغات (مثل Maven وnpm). وهي تتكامل بشكل كامل مع أدوات وبيئات تشغيل Google Cloud وتتيح إدارة التبعية استنادًا إلى اللغة لاستخدامها مع أدوات مثل npm وMaven. سيجعل ذلك من السهل دمج هذه الأداة مع أدوات CI/CD لإعداد المسارات المبرمَجة.
يتضمّن هذا التمرين المعملي بعض الميزات المتوفّرة في 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 إدارة صور الحاويات وحِزم اللغات. تتطلب أنواع العناصر المختلفة مواصفات مختلفة. على سبيل المثال، تختلف طلبات تبعيات 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
عليها. يمكنك معرفة ما إذا كان "فحص الثغرات الأمنية" قيد التشغيل أو مكتملاً وأن عدد الثغرات المكتشَفة ظاهر.
انقر على عدد الثغرات الأمنية وستظهر قائمة بالثغرات الأمنية المُكتشفة في الصورة، بالإضافة إلى اسم نشرة CVE وخطورة الاختراق، ويمكنك النقر على "عرض" في كل ثغرة أمنية مُدرجة للحصول على مزيد من التفاصيل:
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 ونفِّذ الأمر أعلاه مرة أخرى لتحميل مجلد التطبيق.
افتح pom.xml في محرِّر Cloud Shell، وانقر على Open Editor (فتح المحرِّر).
افتح الوحدة الطرفية من محرِّر 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 Java لاستخدامها في مشاريع أخرى في مؤسستك.
شغّل الأمر التالي لتحميل حزمة 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