1. نظرة عامة
يتيح لك Artifact Registry تخزين أنواع مختلفة من العناصر، وإنشاء مستودعات متعددة في مشروع واحد، وربط منطقة معيّنة أو مناطق متعدّدة بكل مستودع. هناك عدة أوضاع للمستودع. ولكل وضع غرض مختلف. يوضّح الرسم البياني التالي إحدى الطرق العديدة الممكنة لاستخدام المستودعات في أوضاع مختلفة معًا. يعرض الرسم البياني سير عمل على مستوى مشروعَين على Google Cloud. في مشروع تطوير، ينشئ المطوّرون تطبيق Java. في مشروع وقت التشغيل المنفصل، ينشئ الإصدار الآخر صورة حاوية تحتوي على التطبيق ليتم نشرها على Google Kubernetes Engine.
في هذا التمرين المعملي، ستتعرّف على كيفية تنفيذ المهام التالية.
- استخدام المستودعات العادية لنشر الحِزم الخاصة
- استخدام المستودعات البعيدة لتخزين حِزم Maven Central في ذاكرة التخزين المؤقت
- استخدام المستودعات الافتراضية لدمج عدة مستودعات تابعة لمصدر الإصدار في إعداد واحد
إعداد البيئة حسب وتيرة الطالب واحتياجاته
- سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.
- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها واجهات برمجة تطبيقات Google. ويمكنك تعديله في أي وقت.
- يكون معرّف المشروع فريدًا في جميع مشاريع Google Cloud وغير قابل للتغيير (لا يمكن تغييره بعد ضبطه). تُنشئ وحدة تحكّم Cloud Console سلسلة فريدة تلقائيًا، ولا يهمّك عادةً معرفة محتواها. في معظم ورشات عمل رموز البرامج، ستحتاج إلى الإشارة إلى معرّف المشروع (يُعرَف عادةً باسم
PROJECT_ID
). إذا لم يعجبك المعرّف الذي تم إنشاؤه، يمكنك إنشاء معرّف آخر عشوائي. يمكنك بدلاً من ذلك تجربة عنوانك ومعرفة ما إذا كان متاحًا. ولا يمكن تغييره بعد هذه الخطوة وسيظلّ ساريًا طوال مدة المشروع. - يُرجى العِلم أنّ هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. اطّلِع على مزيد من المعلومات عن كلّ من هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد/واجهات برمجة تطبيقات Cloud. من المفترض ألا تتطلّب المشاركة في هذا الدليل التعليمي البرمجي أي تكلفة، أو أن تكون التكلفة منخفضة جدًا. لإيقاف الموارد كي لا يتم تحصيل رسوم منك بعد انتهاء هذا الدليل التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع بأكمله. المستخدمون الجدد في Google Cloud مؤهّلون للاستفادة من برنامج الفترة التجريبية المجانية التي تقدّم رصيدًا بقيمة 300 دولار أمريكي.
إعداد Workspace
إعداد 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)')
تفعيل واجهات برمجة التطبيقات
gcloud services enable artifactregistry.googleapis.com
استنساخ المستودع
git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/container-registry/container-analysis
2. المستودعات العادية
توفّر المستودعات العادية طريقة لتخزين حِزمك الخاصة ومشاركتها على مستوى تطبيقاتك الأخرى.
إنشاء مستودع maven عادي
من 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
. إذا نقرت عليه، ستلاحظ أنّه فارغ في الوقت الحالي.
gcloud artifacts repositories describe container-dev-java-repo \
--location=us-central1
من المفترض أن يعرض ردًا مشابهًا لما يلي:
Encryption: Google-managed key Repository Size: 0.000MB createTime: '2023-03-21T19:01:45.461589Z' description: Java package repository for Container Dev Workshop format: MAVEN mavenConfig: {} mode: STANDARD_REPOSITORY name: projects/qwiklabs-gcp-03-4304110dc461/locations/us-central1/repositories/container-dev-java-repo updateTime: '2023-03-21T19:01:45.461589Z'
ضبط Maven لاستخدام Artifact Registry
شغِّل الأمر التالي لطباعة إعدادات المستودع لإضافتها إلى مشروع Java:
gcloud artifacts print-settings mvn \
--repository=container-dev-java-repo \
--location=us-central1
يعرض الأمر السابق ملف xml ليتمّت إضافته إلى ملف pom.xml في مشاريعك.
- يحدِّد قسم المستودعات الأماكن التي يمكن أن ينزِّل فيها Maven العناصر البعيدة لاستخدامها في المشروع الحالي.
- يحدِّد قسم distributionManagement المستودع البعيد الذي سيتم دفع المشروع إليه عند نشره.
- يضيف قسم الإضافات artifactregistry-maven-wagon الذي يُمكّن طبقة المصادقة والنقل اللازمة للاتصال بـ Artifact Registry.
- ملاحظة: يمكن أن تتوفّر الإضافات في pom.xml أو extensions.xml. في الحالات التي يعتمد فيها المشروع على مشروع رئيسي، يتم الوصول إلى هذه التبعيات قبل تحميل بقية الإدخالات في pom.xml. لضمان وصول العنصر الرئيسي إلى الإضافة، يمكن وضعها في ملف extensions.xml يتم تحميله قبل pom.xml، ما يجعلها متاحة للتبعيات الرئيسية.
انسخ الأقسام الثلاثة ثم افتح pom.xml
في محرِّر Cloud Shell وأضِف الإعدادات المعروضة في أسفل الملف داخل علامة project
الإغلاق.
ملاحظة: في CloudShell، نفِّذ الأمر التالي في الوحدة الطرفية لفتح المحرِّر في الدليل الحالي.
cloudshell workspace .
مثال: (ستختلف أسماء مشاريعك في عناوين URL)
...
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
</build>
</project>
تحميل حزمة Java إلى Artifact Registry
بعد ضبط Artifact Registry في Maven، يمكنك الآن استخدام Artifact Registry لتخزين حِزم Java لاستخدامها من قِبل مشاريع أخرى في مؤسستك.
نفِّذ الأمر التالي لتحميل حزمة Java إلى Artifact Registry:
mvn deploy -DskipTests
إذا أردت تنفيذ هذا الأمر مرة أخرى، احرص على زيادة الإصدار في ملف pom.xml.
التحقّق من حزمة Java في Artifact Registry
انتقِل إلى Cloud Console - سجلّ العناصر - المستودعات. انقر على container-dev-java-repo
وتأكَّد من توفّر العنصر الثنائي hello-world
:
3- المستودعات البعيدة
توفّر المستودعات البعيدة إمكانية تخزين حِزم الجهات الخارجية مؤقتًا لزيادة الموثوقية والأمان.
إنشاء مستودع بعيد
ملاحظة: لمعرفة تفاصيل حول المصادقة والضبط، راجِع مستندات المنتج.
من Cloud Shell، شغِّل الأمر التالي لإنشاء مستودع بعيد لعناصر Maven Central:
gcloud artifacts repositories create maven-central-cache \
--project=$PROJECT_ID \
--repository-format=maven \
--location=us-central1 \
--description="Remote repository for Maven Central caching" \
--mode=remote-repository \
--remote-repo-config-desc="Maven Central" \
--remote-mvn-repo=MAVEN-CENTRAL
مراجعة المستودع في وحدة التحكّم
انتقِل إلى Cloud Console - Artifact Registry - Repositories (وحدة تحكّم Cloud Console - سجلّ العناصر - المستودعات). انقر على maven-central-cache
ولاحظ أنّه تم إنشاؤه وأنّه فارغ حاليًا.
مراجعة المستودع في وحدة التحكّم الطرفية
gcloud artifacts repositories describe maven-central-cache \
--location=us-central1
دمج المستودع في مشروعك
شغِّل الأمر التالي لطباعة إعدادات المستودع لإضافتها إلى مشروع Java:
gcloud artifacts print-settings mvn \
--repository=maven-central-cache \
--location=us-central1
أضِف قسم المستودع إلى ملف pom.xml. احرص على عدم نسخ العلامة الخارجية <repositories> من الإخراج.
غيِّر معرّف المستودع الذي تمت إضافته حديثًا إلى "مركزي" لضمان أن يكون لكل إدخال في المستودع معرّف فريد.
مثال: (ستختلف أسماء مشاريعك في عناوين URL)
...
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>central</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/maven-central-cache</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
</build>
</project>
شغِّل الأوامر التالية في وحدة التحكّم الطرفية لإنشاء extensions.xml
لمشروعك، وذلك لاستخدام آلية الإضافات الأساسية التي تضمن أنّ Maven يمكنه حلّ التبعيات الرئيسية أو المكوّنات الإضافية من "مستودع العناصر".
mkdir .mvn
cat > .mvn/extensions.xml << EOF
<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd">
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
EOF
سحب المهام التابعة من المستودع البعيد
شغِّل الأمر التالي لتجميع تطبيقك باستخدام "المستودع البعيد":
rm -rf ~/.m2/repository
mvn compile
مراجعة الحِزم في وحدة التحكّم
انتقِل إلى Cloud Console - سجلّ العناصر - المستودعات. انقر على maven-central-cache
وتأكَّد من أنّ العناصر الثنائية المخزّنة مؤقتًا هناك:
4. المستودعات الافتراضية
تعمل المستودعات الافتراضية كواجهة للوصول إلى مستودعات متعددة من خلال عملية ضبط واحدة. ويؤدي ذلك إلى تبسيط إعداد العميل لمستهلكي العناصر وزيادة الأمان من خلال الحد من هجمات الخلط في التبعيات.
إنشاء ملف سياسة
cat > ./policy.json << EOF
[
{
"id": "private",
"repository": "projects/${PROJECT_ID}/locations/us-central1/repositories/container-dev-java-repo",
"priority": 100
},
{
"id": "central",
"repository": "projects/${PROJECT_ID}/locations/us-central1/repositories/maven-central-cache",
"priority": 80
}
]
EOF
إنشاء المستودع الافتراضي
gcloud artifacts repositories create virtual-maven-repo \
--project=${PROJECT_ID} \
--repository-format=maven \
--mode=virtual-repository \
--location=us-central1 \
--description="Virtual Maven Repo" \
--upstream-policy-file=./policy.json
دمج المستودع في مشروعك
شغِّل الأمر التالي لطباعة إعدادات المستودع لإضافتها إلى مشروع Java:
gcloud artifacts print-settings mvn \
--repository=virtual-maven-repo \
--location=us-central1
استبدِل قسم المستودعات بالكامل في pom بقسم المستودعات الافتراضية من الإخراج.
مثال: (ستختلف أسماء مشاريعك في عناوين URL)
...
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/virtual-maven-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
</build>
</project>
سحب المهام التابعة من "المستودع الافتراضي"
بما أنّ المستودع الافتراضي هو مستودع عبور ولن يخزن أي حِزم فعلية، لشرح العملية بوضوح، عليك حذف مستودع maven-central-cache الذي أنشأته سابقًا وإعادة إنشائه للبدء من جديد باستخدام مستودع فارغ.
شغِّل الأوامر التالية لإعادة إنشاء مستودع ذاكرة التخزين المؤقت.
gcloud artifacts repositories delete maven-central-cache \
--project=$PROJECT_ID \
--location=us-central1 \
--quiet
gcloud artifacts repositories create maven-central-cache \
--project=$PROJECT_ID \
--repository-format=maven \
--location=us-central1 \
--description="Remote repository for Maven Central caching" \
--mode=remote-repository \
--remote-repo-config-desc="Maven Central" \
--remote-mvn-repo=MAVEN-CENTRAL
يمكنك مراجعة المستودع الفارغ في وحدة التحكّم. انتقِل إلى Cloud Console - Artifact Registry - Repositories (وحدة تحكّم في Cloud - سجلّ العناصر - المستودعات).
الآن، يمكنك استخدام المستودع الافتراضي من خلال إنشاء مشروعك باستخدام الأمر التالي:
rm -rf ~/.m2/repository
mvn compile
مراجعة الحِزم في وحدة التحكّم
انتقِل إلى Cloud Console - سجلّ العناصر - المستودعات. انقر على maven-central-cache
وتأكَّد من أنّه تم ضبط العناصر الثنائية لسحبها من المستودع الافتراضي، ولكن تم سحب العناصر في النهاية من maven-central-cache
:
5- تهانينا!
تهانينا، لقد أكملت دورة codelab.
المحتوى الذي سبق لك تغطية رسومه
- استخدام المستودعات العادية لنشر حِزمك الخاصة
- المستودعات البعيدة المستخدَمة لتخزين حِزم Maven Central في ذاكرة التخزين المؤقت
- استخدام مستودعات افتراضية لدمج مستودعات متعددة في مصدر الإصدار في إعداد واحد
تنظيف
نفِّذ الأمر التالي لحذف المشروع.
gcloud projects delete ${PROJECT_ID}
—
تاريخ التعديل الأخير: 22/03/2023