1. نظرة عامة
بصفتها الإصدار المتطوّر من "مستودع الحِزم"، يشكّل مستودع العناصر مكانًا واحدًا لمؤسستك لإدارة صور الحِزم وحِزم اللغات (مثل Maven وnpm). وهي تتكامل بشكل كامل مع أدوات وبيئات تشغيل Google Cloud وتتيح إدارة التبعية استنادًا إلى اللغة لاستخدامها مع أدوات مثل npm وMaven. ويسهّل ذلك دمجها مع أدوات التطوير المتكامل/النشر المبرمَج لإعداد مسارات مبرمَجة.
يتضمّن هذا التمرين المعملي بعض الميزات المتوفّرة في Artifact Registry.
ما ستتعرّف عليه
ما هي أهداف التعلّم لهذا الدرس التطبيقي؟
- إنشاء مستودعات للحاويات وحِزم اللغات
- إدارة صور الحاويات باستخدام Artifact Registry
- دمج Artifact Registry مع Cloud Code
- ضبط Maven لاستخدام Artifact Registry لاعتمادات Java
2. الإعداد والمتطلبات
إعداد البيئة حسب وتيرة الطالب واحتياجاته
- سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.
- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها واجهات برمجة تطبيقات Google، ويمكنك تعديلها في أي وقت.
- يجب أن يكون معرّف المشروع فريدًا في جميع مشاريع 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/
إعداد البنية الأساسية المستخدَمة في هذا الدرس العملي
في هذا التمرين، سيتم نشر الرمز إلى "خدمات Google لتنسيق Kubernetes". يعمل النص البرمجي للإعداد أدناه على إعداد هذه البنية الأساسية من أجلك.
gcloud container clusters create container-dev-cluster --zone=us-central1-b
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 - سجلّ العناصر - المستودعات، ولاحظ مستودع 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 - المستودعات.
انقر على container-dev-repo
وتأكَّد من أنّ الصورة java-hello-world
متوفّرة. انقر على الصورة ولاحظ الصورة التي تم وضع علامة tag1
عليها. يمكنك معرفة ما إذا كان "فحص الثغرات الأمنية" قيد التشغيل أو مكتملاً وأن عدد الثغرات المكتشَفة ظاهر.
انقر على عدد الثغرات الأمنية وستظهر لك قائمة الثغرات الأمنية التي تم رصدها في الصورة، مع اسم نشرة CVE وشدتها. يمكنك النقر على "عرض" في كل ثغرة أمنية مُدرَجة للحصول على مزيد من التفاصيل:
4. الدمج مع رمز السحابة الإلكترونية
في هذا القسم، ستتعرّف على كيفية استخدام مستودع صور Docker في Artifact Registry مع Cloud Code.
نشر التطبيق في مجموعة 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
.
عندما يُطلب منك ذلك، اختَر Yes
لاستخدام السياق الحالي في kubeconfig الذي يشير إلى مجموعة container-dev-cluster
GKE التي تم توفيرها للتجربة.
في طلب تسجيل الصور، أدخِل الموقع الجغرافي للعنوان الذي حدّدته قبل التأكّد من استبدال <PROJECT_ID> بالقيمة الفعلية.
us-central1-docker.pkg.dev/<PROJECT_ID>/container-dev-repo
عند تنفيذ "التشغيل على Kubernetes" للمرة الأولى، سيطلب منك Cloud Code تحديد موقع مستودع الصور المستهدَف. بعد تقديم عنوان URL للمستودع، يتم تخزينه في الملف .vscode/launch.json
الذي يتم إنشاؤه في مجلد التطبيق.
في جزء النتائج، ستلاحظ أنّ عملية الإنشاء تبدأ لصورة التطبيق java-hello-world,
. تم تحميل الصورة إلى مستودع Artifact Registry الذي تم ضبطه سابقًا.
انتقِل إلى Cloud Console - Artifact Registry - Repositories (وحدة تحكّم Cloud Console - سجلّ العناصر - المستودعات). انقر على container-dev-repo
وتأكَّد من أنّ صورة java-hello-world
متوفّرة، ولاحظ صورة جديدة تم وضع علامة عليها latest
.
مراجعة التطبيق المنشور
الرجوع إلى محرِّر Cloud Shell: عند اكتمال النشر، سيطبع Skaffold/Cloud Code عنوان URL الذي تمت إعادة توجيه الخدمة إليه، وانقر على الرابط - Open Web Preview:
في نافذة المتصفّح الجديدة، ستظهر لك صفحة تطبيق "مرحبًا بك".
تعديل رمز التطبيق
عدِّل التطبيق الآن للاطّلاع على التغيير الذي تم تنفيذه على الفور في عملية النشر على المجموعة:
افتح مجلد HelloWorldController.java
في src/main/java/cloudcode/helloworld/web
في محرِّر Cloud Shell.
غيِّر النص في الصف 20 من "جارٍ التنفيذ" إلى "تم التحديث"، ومن المفترض أن تبدأ عملية الإنشاء والنشر على الفور.
في نهاية عملية النشر، انقر مرة أخرى على عنوان URL المُعاد توجيهه أو أعِد تحميل نافذة المتصفّح التي تتضمّن التطبيق للاطّلاع على التغيير الذي تم نشره:
انتقِل مرة أخرى إلى Cloud Console - سجلّ العناصر - المستودعات. انقر على container-dev-repo
وتأكَّد من أنّ صورة java-hello-world
متوفّرة، وسجِّل الصورة الجديدة.
5- العمل مع حِزم اللغات
في هذا القسم، ستتعرّف على كيفية إعداد مستودع 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 - سجلّ العناصر - المستودعات، ولاحظ مستودع Maven الذي تم إنشاؤه حديثًا باسم container-dev-java-repo
. إذا نقرت عليه، ستلاحظ أنّه فارغ في الوقت الحالي.
إعداد المصادقة في "مستودع العناصر"
استخدِم الأمر التالي لتعديل الموقع المعروف لـ "بيانات اعتماد التطبيق التلقائية" (ADC) باستخدام بيانات اعتماد حساب المستخدم حتى يتمكّن مزوّد بيانات اعتماد Artifact Registry من المصادقة باستخدامها عند الربط بالمستودعات:
gcloud auth login --update-adc
ضبط Maven لاستخدام 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
<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
:
6- تهانينا!
تهانينا، لقد أكملت دورة codelab.
المحتوى الذي سبق لك تغطيته
- تم إنشاء مستودعات للحاويات وحِزم اللغات
- صور الحاويات المُدارة باستخدام Artifact Registry
- خدمة Artifact Registry المدمجة مع رمز Cloud
- تم إعداد Maven لاستخدام Artifact Registry لتبعيات Java.
تنظيف
نفِّذ الأمر التالي لحذف المشروع.
gcloud projects delete $PROJECT_ID