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

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. ويمكنك تعديله في أي وقت.
  • يكون معرّف المشروع فريدًا في جميع مشاريع 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 - سجلّ العناصر - المستودعات ولاحظ مستودع 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:

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

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 - Repositories (وحدة تحكّم في Cloud - سجلّ العناصر - المستودعات).

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

rm -rf ~/.m2/repository 
mvn compile

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

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

9deea93caa5fefd7.png

5- تهانينا!

تهانينا، لقد أكملت دورة codelab.

المحتوى الذي سبق لك تغطية رسومه

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

تنظيف

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

gcloud projects delete ${PROJECT_ID}

تاريخ التعديل الأخير: 22‏/03‏/2023