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

1. نظرة عامة

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

916a54f51af5ee54.png

ما المقصود بخدمة Cloud Build؟

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

ما المقصود بميزة "النشر في السحابة الإلكترونية"؟

النشر على السحابة الإلكترونية هي خدمة تسليم متواصل مُدارة بالكامل. من خلال ميزة "النشر في السحابة الإلكترونية"، يمكنك إنشاء مسارات نشر لتطبيقات GKE وAnthos وCloud Run.

ما المقصود بـ Cloud Run؟

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

ما هو "سكافولد"؟

سكافولد هي أداة سطر أوامر تتيح التطوير المستمر للتطبيقات الأصلية لـ Kubernetes. تستخدم ميزة "النشر في السحابة الإلكترونية" Skaffold لعمليات العرض والنشر.

ما سوف تتعلمه

ستتعلم في هذا التمرين المعملي كيفية القيام بما يلي:

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

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

  • يفترض هذا التمرين المعملي الإلمام ببيئتي Cloud Console وطبقة الغلاف.

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

إعداد مشروع Cloud

  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

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

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 الذي يتضمّن الخطوات اللازمة لإنشاء صورة حاوية وإنشاء إصدار "النشر على السحابة الإلكترونية":

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. إنشاء مسار النشر في السحابة الإلكترونية

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

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

إنشاء مسار النشر في السحابة الإلكترونية:

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

راجِع المسار الذي تم إنشاؤه في النشر في السحابة الإلكترونية.

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

إنشاء صورة حاوية وإصدار "النشر على السحابة الإلكترونية":

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

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

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

6- ترقية الإصدار إلى بيئات تأكيد الجودة وPROD

باستخدام 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 Console ووافِق على الإصدار للنشر في قناة الإصدار العلني.

4c838b60770e9691.png

راجِع حالة مسار النشر على السحابة الإلكترونية ومقاييس DORA المتاحة ("عدد عمليات النشر" و"معدّل النشر" و"معدّل تعذُّر النشر").

المقياس

الوصف

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

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

معدّل النشر

عدد المرات التي يتم فيها بدء مسار التسليم إلى الهدف النهائي في مسار التسليم.أحد المقاييس الأربعة الرئيسية المحددة في برنامج DevOps للبحث والتقييم (DORA).

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

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

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

d6372b5350f10875.png

7. تهانينا!

تهانينا، لقد أنهيت الدرس التطبيقي حول الترميز.

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

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

تَنظيم

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

حذف المشروع

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

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