نشر تطبيق Cloud Run باستخدام Cloud Deployment

1. نظرة عامة

في هذا الدرس التطبيقي، ستنشر تطبيق .Net على Cloud Run باستخدام Cloud Deploy. ستنشئ صورة حاوية باستخدام Cloud Build بدون استخدام Dockerfile. ستُعدّ مسارًا يتضمّن ثلاث بيئات مستهدَفة باستخدام Cloud Deploy، وستتّبع الخطوات اللازمة لترقية الإصدار من خلال البيئات. أخيرًا، ستوافق على نشر الإصدار في بيئة الإنتاج.

916a54f51af5ee54.png

ما هي خدمة Cloud Build؟

باستخدام خدمة Cloud Build، يمكنك إنشاء برامج بسرعة بجميع لغات البرمجة.

ما هي خدمة Cloud Deploy؟

‫Cloud Deploy هي خدمة تسليم متواصل مُدارة بالكامل. باستخدام Cloud Deploy، يمكنك إنشاء مسارات نشر لخدمات GKE وAnthos وCloud Run.

ما هي خدمة Cloud Run؟

باستخدام Cloud Run، يمكنك نشر تطبيقات قابلة للتوسيع ومحفوظة في حاويات ومكتوبة بأي لغة (بما في ذلك Go وPython وJava وNode.js و‎.NET وRuby) على منصة مُدارة بالكامل.

ما هي أداة Skaffold؟

‫Skaffold هي أداة سطر أوامر تتيح التطوير المستمر للتطبيقات المتوافقة مع Kubernetes. تستخدم Cloud Deploy أداة Skaffold لعمليات العرض والنشر.

ما ستتعلمه

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

  • إنشاء مسار Cloud Deploy
  • إنشاء صورة حاوية لتطبيق ‎ .Net باستخدام Cloud Build بدون استخدام Dockerfile
  • نشر التطبيق على Cloud Run باستخدام Cloud Deploy
  • ترقية إصدارات Cloud Deploy

المتطلبات الأساسية

  • يفترض هذا التمرين المعملي أنك على دراية ببيئات Cloud Console وShell.

2. الإعداد والمتطلبات

إعداد مشروع على السحابة الإلكترونية

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

إعداد البيئة

فعِّل Cloud Shell من خلال النقر على الرمز على يسار شريط البحث.

eb0157a992f16fa3.png

من Cloud Shell، شغِّل الأمر التالي لضبط متغيّرات بيئة المشروع:

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
--format='value(projectNumber)')
export REGION=us-central1

فعِّل واجهات برمجة التطبيقات باتّباع الخطوات التالية:

gcloud services enable \
  run.googleapis.com \
  cloudbuild.googleapis.com \
  clouddeploy.googleapis.com \
  artifactregistry.googleapis.com

أنشئ مستودع Artifact Registry لتخزين صور حاويات التطبيقات:

gcloud artifacts repositories create containers-repo \
  --repository-format=docker \
  --location=${REGION} \
  --description="Containers repository"

3- مراجعة ملفات الإعداد

29c2533441779de0.png

استنساخ الرمز المصدري للتطبيق:

git clone https://github.com/gitrey/deploy-cloudrun-app-with-clouddeploy.git
cd deploy-cloudrun-app-with-clouddeploy

راجِع إعدادات مسار Cloud Deploy:

clouddeploy.yaml

apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
 name: cloud-run-pipeline
description: application deployment pipeline
serialPipeline:
 stages:
 - targetId: dev-env
   profiles: [dev]
 - targetId: qa-env
   profiles: [qa]
 - targetId: prod-env
   profiles: [prod]
---

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: dev-env
description: Cloud Run development service
run:
 location: projects/_PROJECT_ID/locations/us-west1
---

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: qa-env
description: Cloud Run QA service
run:
 location: projects/_PROJECT_ID/locations/us-central1
---

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: prod-env
description: Cloud Run PROD service
run:
 location: projects/_PROJECT_ID/locations/us-south1

راجِع ملف skaffold.yaml الذي يحدّد ثلاث بيئات، ويستخدم Cloud Run كخدمة مستهدَفة.

skaffold.yaml

apiVersion: skaffold/v3alpha1
kind: Config
metadata: 
  name: cloud-run-app
profiles:
- name: dev
  manifests:
    rawYaml:
    - deploy-dev.yaml
- name: qa
  manifests:
    rawYaml:
    - deploy-qa.yaml
- name: prod
  manifests:
    rawYaml:
    - deploy-prod.yaml
deploy:
  cloudrun: {}

راجِع ملفات إعداد الخدمة.

deploy-dev.yaml

kind: Service
metadata:
  name: app-dev
spec:
  template:
    spec:
      containers:
      - image: app
        resources:
          limits:
            cpu: 1000m
            memory: 128Mi

deploy-qa.yaml

kind: Service
metadata:
  name: app-dev
spec:
  template:
    spec:
      containers:
      - image: app

deploy-prod.yaml

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: app-prod
spec:
  template:
    spec:
      containers:
      - image: app

راجِع ملف cloudbuild.yaml الذي يتضمّن خطوات إنشاء صورة حاوية وإنشاء إصدار Cloud Deploy:

cloudbuild.yaml

steps:
- name: 'gcr.io/k8s-skaffold/pack'
  entrypoint: 'pack'
  args: ['build',
         '--builder=gcr.io/buildpacks/builder',
         '--publish', '${_REGION}-docker.pkg.dev/${PROJECT_ID}/containers-repo/app:$BUILD_ID']
  id: Build and package .net app
- name: gcr.io/google.com/cloudsdktool/cloud-sdk:slim
  args: 
      [
        "deploy", "releases", "create", "release-$_RELEASE_TIMESTAMP",
        "--delivery-pipeline", "cloud-run-pipeline",
        "--region", "${_REGION}",
        "--images", "app=${_REGION}-docker.pkg.dev/${PROJECT_ID}/containers-repo/app:$BUILD_ID"
      ]
  entrypoint: gcloud

4. إنشاء مسار Cloud Deploy

استبدِل قيمة _PROJECT_ID في ملف clouddeploy.yaml:

sed -i "s/_PROJECT_ID/$PROJECT_ID/g" clouddeploy.yaml

أنشئ مسار Cloud Deploy على النحو التالي:

gcloud deploy apply \
  --file=clouddeploy.yaml \
  --region=${REGION} \
  --project=${PROJECT_ID}

راجِع مسار العرض الذي تم إنشاؤه في Cloud Deploy.

5- إنشاء صورة حاوية وإنشاء إصدار

أضِف أذونات مشغّل Cloud Deploy إلى حساب خدمة Cloud Build:

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
    --member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
    --role=roles/clouddeploy.operator

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
    --member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
    --role=roles/iam.serviceAccountUser

إنشاء صورة حاوية وإصدار Cloud Deploy:

export RELEASE_TIMESTAMP=$(date '+%Y%m%d-%H%M%S')

gcloud builds submit \
  --config cloudbuild-plus.yaml \
  --substitutions=_REGION=${REGION},_RELEASE_TIMESTAMP=${RELEASE_TIMESTAMP}

راجِع الإصدار الذي تم إنشاؤه في Cloud Deploy. انتظِر إلى أن يكتمل النشر في بيئة التطوير.

6. ترقية الإصدار إلى بيئتَي ضمان الجودة والإنتاج

باستخدام Cloud Console أو Cloud Shell، يمكنك نقل الإصدار إلى الهدف التالي(qa-env).

روِّج للإصدار باستخدام Cloud Shell، وشغِّل أمر gcloud للترويج للإصدار.

gcloud beta deploy releases promote \
    --release="release-${RELEASE_TIMESTAMP}" \
    --delivery-pipeline=cloud-run-pipeline \
    --region=${REGION} \
    --quiet

انتظِر إلى أن يكتمل النشر في بيئة ضمان الجودة. ترقية الإصدار إلى الهدف التالي(prod-env)

gcloud beta deploy releases promote \
    --release="release-${RELEASE_TIMESTAMP}" \
    --delivery-pipeline=cloud-run-pipeline \
    --region=${REGION} \
    --quiet

افتح Cloud Deploy في Cloud Console ووافِق على الإصدار لنشره في مرحلة الإنتاج.

4c838b60770e9691.png

راجِع حالة مسار Cloud Deploy ومقاييس DORA المتاحة ("عدد عمليات النشر" و"معدّل تكرار عمليات النشر" و"معدّل فشل عمليات النشر").

المقياس

الوصف

عدد عمليات النشر

إجمالي عدد عمليات النشر الناجحة والفاشلة إلى الهدف النهائي في مسار التسليم

معدّل النشر

عدد المرات التي يتم فيها نشر مسار التسليم إلى الهدف النهائي في مسار التسليم، وهو أحد المقاييس الرئيسية الأربعة التي يحدّدها برنامج DevOps Research and Assessment (DORA).

معدّل تعذُّر النشر

النسبة المئوية لعمليات الطرح التي تعذّر إجراؤها إلى الاستهداف النهائي في مسار التسليم

راجِع التطبيقات التي تم نشرها في Cloud Run:

d6372b5350f10875.png

7. تهانينا!

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

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

  • كيفية إنشاء مسار Cloud Deploy
  • كيفية إنشاء صورة حاوية لتطبيق ‎ .Net باستخدام Cloud Build
  • كيفية نشر تطبيق على Cloud Run باستخدام Cloud Deploy
  • كيفية الترويج لإصدار Cloud Deploy

تَنظيم

لتجنُّب تحمّل رسوم في حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا البرنامج التعليمي، احذف المشروع الذي يحتوي على الموارد أو احتفظ بالمشروع واحذف الموارد الفردية.

حذف المشروع

أسهل طريقة لإيقاف الفوترة هي حذف المشروع الذي أنشأته لتنفيذ البرنامج التعليمي.

8. الخطوات التالية