نشر تطبيق 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. ويمكنك تعديله في أي وقت.
  • يكون معرّف المشروع فريدًا في جميع مشاريع 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 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- ترقية الإصدار إلى البيئتَين QA و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 Deploy في Cloud Console واعتمد الإصدار لنشره في قناة الإصدار العلني.

4c838b60770e9691.png

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

المقياس

الوصف

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

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

معدّل النشر

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

نسبة حالات تعذُّر النشر

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

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

d6372b5350f10875.png

7- تهانينا!

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

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

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

تَنظيم

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

حذف المشروع

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

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