تأمين توريد البرامج

1. نظرة عامة

تتيح لك خدمة Artifact Registry تخزين أنواع مختلفة من العناصر، وإنشاء مستودعات متعددة في مشروع واحد، وربط منطقة معيّنة أو مناطق متعدّدة بكل مستودع. تتوفّر عدة أوضاع للمستودع. لكل وضع غرض مختلف. يوضّح المخطّط البياني التالي إحدى الطرق العديدة المحتمَلة التي يمكنك من خلالها استخدام المستودعات في أوضاع مختلفة معًا. يعرض الرسم البياني سير عمل على مستوى مشروعَين في Google Cloud. في مشروع تطوير، ينشئ المطوّرون تطبيق Java. في مشروع وقت تشغيل منفصل، تنشئ عملية إنشاء أخرى صورة حاوية تتضمّن التطبيق لنشره على Google Kubernetes Engine.

5af5e4da3ccfdff3.png

في هذه الميزة الاختبارية، ستتعرّف على كيفية تنفيذ المهام التالية.

  • استخدام المستودعات العادية لنشر حِزمك الخاصة
  • استخدام مستودعات بعيدة لتخزين حِزم Maven Central مؤقتًا
  • استخدام مستودعات افتراضية لدمج مستودعات متعددة المصدر في إعداد واحد

إعداد البيئة بوتيرة ذاتية

  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 دولار أمريكي.

إعداد 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 - Artifact Registry - المستودعات ولاحِظ مستودع 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 Editor وأضِف الإعدادات التي تم إرجاعها إلى أسفل الملف داخل علامة الإغلاق 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 لتخزين ملفات JAR بلغة Java لاستخدامها في مشاريع أخرى في مؤسستك.

نفِّذ الأمر التالي لتحميل حزمة Java إلى Artifact Registry:

mvn deploy -DskipTests

إذا أردت تنفيذ هذا الأمر مرة أخرى، احرص على زيادة رقم الإصدار في ملف pom.xml.

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

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

147eac5168648db1.png

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 - المستودعات. انقر على maven-central-cache ولاحظ أنّه تم إنشاؤه وهو فارغ حاليًا.

مراجعة المستودع في نافذة Terminal

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> الخارجية من الناتج.

غيِّر معرّف المستودع المضاف حديثًا إلى "central" لضمان حصول كل إدخال في المستودع على معرّف فريد.

مثال: (ستختلف أسماء المشاريع في عناوين 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 التبعيات الرئيسية أو تبعيات المكوّنات الإضافية من Artifact Registry.

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 - Artifact Registry - Repositories وانقر على maven-central-cache وتأكَّد من أنّ العناصر الثنائية المخزّنة مؤقتًا هناك:

9deea93caa5fefd7.png

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 - المستودعات

الآن، يمكنك تجربة المستودع الافتراضي من خلال إنشاء مشروعك باستخدام الأمر التالي

rm -rf ~/.m2/repository 
mvn compile

مراجعة الحِزم في وحدة التحكّم

انتقِل إلى Cloud Console - Artifact Registry - Repositories. انقر على maven-central-cache وتأكَّد من ضبط العناصر الثنائية لسحبها من المستودع الافتراضي، ولكن تم سحبها في النهاية من maven-central-cache:

9deea93caa5fefd7.png

5- تهانينا!

تهانينا، لقد أكملت درس البرمجة.

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

  • استخدام المستودعات العادية لنشر حِزمك الخاصة
  • استخدام مستودعات بعيدة لتخزين حِزم Maven Central مؤقتًا
  • استخدام مستودعات افتراضية لدمج عدة مستودعات مصدر في إعداد واحد

تنظيف

نفِّذ الأمر التالي لحذف المشروع.

gcloud projects delete ${PROJECT_ID}

تاريخ آخر تعديل: 22/3/2023