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. ويمكنك تعديله في أي وقت.
- يكون معرّف المشروع فريدًا في جميع مشاريع 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 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 واعتمد الإصدار لنشره في قناة الإصدار العلني.
راجِع حالة مسار Cloud Deploy ومقاييس DORA المتاحة ("عدد عمليات النشر" و"وتيرة عمليات النشر" و"نسبة حالات تعذُّر النشر").
المقياس | الوصف |
عدد عمليات النشر | إجمالي عدد عمليات النشر الناجحة وغير الناجحة إلى الهدف النهائي في مسار الإرسال |
معدّل النشر | عدد المرات التي يتم فيها نشر مسار الإرسال إلى الهدف النهائي في مسار الإرسال.وهو أحد المقاييس الأربعة الرئيسية التي حدّدها برنامج DevOps Research and Assessment (DORA). |
نسبة حالات تعذُّر النشر | النسبة المئوية لعمليات الطرح التي تعذّر إجراؤها على الاستهداف النهائي في مسار الإرسال |
راجِع التطبيقات المنشورة في Cloud Run:
7- تهانينا!
تهانينا، لقد أكملت دورة codelab.
في ما يلي المواضيع التي تناولناها:
- كيفية إنشاء مسار عمل Cloud Deploy
- كيفية إنشاء صورة حاوية لتطبيق .Net باستخدام Cloud Build
- كيفية نشر تطبيق على Cloud Run باستخدام Cloud Deploy
- كيفية الترويج لإصدار Cloud Deploy
تَنظيم
لتجنُّب تحصيل رسوم من حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا الدليل التعليمي، يمكنك إما حذف المشروع الذي يحتوي على الموارد أو الاحتفاظ بالمشروع وحذف الموارد الفردية.
حذف المشروع
إنّ أسهل طريقة لإيقاف الفوترة هي حذف المشروع الذي أنشأته للدليل التعليمي.