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

ما هي خدمة 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. الإعداد والمتطلبات
إعداد مشروع على السحابة الإلكترونية
- سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.



- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديله في أي وقت.
- رقم تعريف المشروع هو معرّف فريد في جميع مشاريع Google Cloud ولا يمكن تغييره بعد ضبطه. تنشئ Cloud Console تلقائيًا سلسلة فريدة، ولا يهمّك عادةً ما هي. في معظم دروس البرمجة، عليك الرجوع إلى رقم تعريف المشروع (يتم تحديده عادةً على أنّه
PROJECT_ID). إذا لم يعجبك رقم التعريف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. يمكنك بدلاً من ذلك تجربة اسم مستخدم من اختيارك لمعرفة ما إذا كان متاحًا. لا يمكن تغيير هذا الخيار بعد هذه الخطوة وسيظل ساريًا طوال مدة المشروع. - للعلم، هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. يمكنك الاطّلاع على مزيد من المعلومات عن كل هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد/واجهات برمجة تطبيقات Cloud. لن تكلفك تجربة هذا الدرس التطبيقي حول الترميز الكثير من المال، إن لم تكلفك شيئًا على الإطلاق. لإيقاف الموارد كي لا يتم تحصيل رسوم منك بعد هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع بأكمله. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.
إعداد البيئة
فعِّل Cloud Shell من خلال النقر على الرمز على يسار شريط البحث.

من 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- مراجعة ملفات الإعداد

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

راجِع حالة مسار Cloud Deploy ومقاييس DORA المتاحة ("عدد عمليات النشر" و"معدّل تكرار عمليات النشر" و"معدّل فشل عمليات النشر").
المقياس | الوصف |
عدد عمليات النشر | إجمالي عدد عمليات النشر الناجحة والفاشلة إلى الهدف النهائي في مسار التسليم |
معدّل النشر | عدد المرات التي يتم فيها نشر مسار التسليم إلى الهدف النهائي في مسار التسليم، وهو أحد المقاييس الرئيسية الأربعة التي يحدّدها برنامج DevOps Research and Assessment (DORA). |
معدّل تعذُّر النشر | النسبة المئوية لعمليات الطرح التي تعذّر إجراؤها إلى الاستهداف النهائي في مسار التسليم |
راجِع التطبيقات التي تم نشرها في Cloud Run:

7. تهانينا!
تهانينا، لقد أكملت درس البرمجة.
المواضيع التي تناولناها:
- كيفية إنشاء مسار Cloud Deploy
- كيفية إنشاء صورة حاوية لتطبيق .Net باستخدام Cloud Build
- كيفية نشر تطبيق على Cloud Run باستخدام Cloud Deploy
- كيفية الترويج لإصدار Cloud Deploy
تَنظيم
لتجنُّب تحمّل رسوم في حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا البرنامج التعليمي، احذف المشروع الذي يحتوي على الموارد أو احتفظ بالمشروع واحذف الموارد الفردية.
حذف المشروع
أسهل طريقة لإيقاف الفوترة هي حذف المشروع الذي أنشأته لتنفيذ البرنامج التعليمي.