1. الأهداف
في هذا البرنامج التعليمي، ستنشئ ثلاث مجموعات GKE باسم preview وcanary وprod. بعد ذلك، ستنشئ هدف Cloud Deploy يتوافق مع كل مجموعة وقناة Cloud Deploy تحدّد تسلسل الخطوات اللازمة لتنفيذ عملية النشر في هذه الأهداف.
سيتم تشغيل مسار نشر من خلال مسار Cloud Build الذي سينشئ إصدار Cloud Deploy وينفّذ عملية النشر في مجموعة المعاينة. بعد التأكّد من أنّ عملية النشر في المعاينة كانت ناجحة وتعمل على النحو المتوقّع، عليك ترقية الإصدار يدويًا في مجموعة اختبار الإصدارات المسبقة. سيتطلّب الترويج للإصدار في مجموعة prod الحصول على موافقة، وستوافق على مسار prod في واجهة مستخدم Cloud Deploy ثمّ تروّج له في النهاية.
يمكن تقسيم أهداف هذا البرنامج التعليمي إلى الخطوات التالية:
- تجهيز مساحة العمل
- تحديد أهداف Cloud Deploy
- تحديد مسار Cloud Deploy
- إنشاء إصدار
- الترويج لعملية نشر
- الموافقة على إصدار علني
إعداد البيئة بوتيرة ذاتية
- سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.



- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة من الأحرف لا تستخدمها Google APIs، ويمكنك تعديلها في أي وقت.
- يجب أن يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud، كما أنّه غير قابل للتغيير (لا يمكن تغييره بعد ضبطه). تنشئ Cloud Console تلقائيًا سلسلة فريدة، ولا يهمّك عادةً ما هي. في معظم دروس الترميز، عليك الرجوع إلى رقم تعريف المشروع (ويتم تحديده عادةً على أنّه
PROJECT_ID)، لذا إذا لم يعجبك، يمكنك إنشاء رقم آخر عشوائي، أو يمكنك تجربة رقمك الخاص ومعرفة ما إذا كان متاحًا. ثم يتم "تجميده" بعد إنشاء المشروع. - هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. يمكنك الاطّلاع على مزيد من المعلومات عن كل هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console من أجل استخدام موارد/واجهات برمجة تطبيقات Cloud. لن تكلفك تجربة هذا الدرس البرمجي الكثير من المال، إن لم تكلفك شيئًا على الإطلاق. لإيقاف الموارد كي لا يتم تحصيل رسوم منك بعد هذا الدرس التطبيقي حول الترميز، اتّبِع أي تعليمات "تنظيف" واردة في نهاية الدرس. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.
2. إعداد المنصة
إعداد مساحة العمل
سنقوم هنا بإعداد البيئة المطلوبة لتنفيذ هذا البرنامج التعليمي. عند اكتمال هذه الخطوة، سيتم إنشاء مجموعة GKE حيث يمكننا تنفيذ عمليات النشر.
- ضبط الإعدادات التلقائية في gcloud
gcloud config set project <your project>
gcloud config set deploy/region us-central1
- Clone Repo
git clone https://github.com/gushob21/software-delivery-workshop
cd software-delivery-workshop/labs/cloud-deploy/
cloudshell workspace .
rm -rf deploy && mkdir deploy
- ضبط متغيّرات البيئة
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects list --filter="$PROJECT_ID" --format="value(PROJECT_NUMBER)")
- تفعيل واجهات برمجة التطبيقات
gcloud services enable \
cloudresourcemanager.googleapis.com \
`container.googleapis.com \`
`cloudbuild.googleapis.com \`
`containerregistry.googleapis.com \`
`secretmanager.googleapis.com \`
`clouddeploy.googleapis.com`
- إنشاء مجموعات GKE
`gcloud container clusters create preview \`
--zone=us-central1-a --async
`gcloud container clusters create canary \`
--zone=us-central1-b --async
`gcloud container clusters create prod \`
--zone=us-central1-c
تحديد أهداف Cloud Deploy
- أنشئ ملفًا في دليل النشر باسم preview.yaml باستخدام الأمر التالي في Cloud Shell:
cat <<EOF >deploy/preview.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: preview
annotations: {}
labels: {}
description: Target for preview environment
gke:
cluster: projects/$PROJECT_ID/locations/us-central1-a/clusters/preview
EOF
As you noticed, the "kind" tag is "Target". It allows us to add some metadata to the target, a description and finally the GKE cluster where the deployment is supposed to happen for this target.
- أنشئ ملفًا في دليل النشر باسم canary.yaml باستخدام الأمر التالي في Cloud Shell:
cat <<EOF >deploy/canary.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: canary
annotations: {}
labels: {}
description: Target for canary environment
gke:
cluster: projects/$PROJECT_ID/locations/us-central1-b/clusters/canary
EOF
- أنشئ ملفًا في دليل النشر باسم prod.yaml باستخدام الأمر التالي في Cloud Shell:
cat <<EOF >deploy/prod.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: prod
annotations: {}
labels: {}
description: Target for prod environment
requireApproval: true
gke:
cluster: projects/$PROJECT_ID/locations/us-central1-c/clusters/prod
EOF
لاحظ أنّ العلامة requireApproval تم ضبطها على "صحيح". ولن يسمح ذلك بالترقية إلى إصدار الإنتاج المستهدف إلى أن تتم الموافقة. يجب أن يكون لديك دور roles/clouddeploy.approver للموافقة على إصدار.
- إنشاء أهداف النشر
`gcloud config set deploy/region us-central1`
gcloud beta deploy apply --file deploy/preview.yaml
gcloud beta deploy apply --file deploy/canary.yaml
gcloud beta deploy apply --file deploy/prod.yaml
3- إنشاء التطبيق
كجزء من إنشاء تطبيق جديد، يتم عادةً إعداد مسار CICD لتنفيذ عمليات الإنشاء والاختبارات وعمليات النشر التلقائية. تُعدّ الخطوات التالية جزءًا من عملية إعداد تطبيق جديد، وسيتم إعداد مسار نشر لكل تطبيق جديد.
تحديد مسار Cloud Deploy
- أنشئ ملفًا في دليل النشر باسم pipeline.yaml باستخدام الأمر التالي في Cloud Shell:
cat <<EOF >>deploy/pipeline.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: DeliveryPipeline
metadata:
name: sample-app
labels:
`app: sample-app`
description: delivery pipeline
serialPipeline:
stages:
- targetId: preview
`profiles:`
`- preview`
- targetId: canary
`profiles:`
`- canary`
- targetId: prod
`profiles:`
`- prod`
EOF
As you noticed, the "kind" tag is "DeliveryPipeline". It lets you define the metadata for the pipeline, a description and an order of deployment into various targets via serialPipeline tag.
تحتوي العلامة serialPipeline على علامة باسم مراحل وهي قائمة بجميع الأهداف التي تم ضبط خط أنابيب التسليم هذا على تفعيلها.
تحدّد targetId الهدف المحدّد الذي سيتم استخدامه في هذه المرحلة من مسار التسليم. القيمة هي السمة metadata.name من تعريف الاستهداف.
profiles هي قائمة تتضمّن صفرًا أو أكثر من أسماء ملفات Skaffold الشخصية، من skaffold.yaml. تستخدم Cloud Deploy الملف الشخصي مع skaffold render عند إنشاء الإصدار.
- تطبيق مسار التعلّم
gcloud beta deploy apply --file deploy/pipeline.yaml
4. مرحلة التطوير
أثناء تطوير التطبيقات، ستنشئ سلاسل أدوات CICD المبرمَجة مواد العرض وتخزِّنها. يتم تنفيذ الأوامر التالية لإنشاء التطبيق باستخدام Skaffold وتخزين مواد العرض لنشرها باستخدام Cloud Deploy. يجب أن تنفّذ عملية التكامل المستمر والتسليم المستمر هذه الخطوة لكل إصدار من التطبيق.
- إنشاء التطبيق وتخزينه باستخدام skaffold
skaffold build \
--file-output=artifacts.json \
--default-repo gcr.io/$PROJECT_ID \
--push=true
5- مرحلة الإصدار
في نهاية عملية التكامل المستمر والتسليم المستمر، وعندما يتم وضع علامة على الرمز للإنتاج عادةً، ستبدأ عملية الإصدار من خلال استدعاء الأمر cloud deploy release. بعد التحقّق من صحة عملية النشر والموافقة عليها، يمكنك نقل الإصدار إلى بيئات الاستهداف المختلفة من خلال الترويج للإجراء والموافقة عليه من خلال عمليات مبرمَجة أو موافقات يدوية.
إنشاء إصدار
أنشأنا ملفات Cloud Deploy في هذا البرنامج التعليمي سابقًا للتعرّف على طريقة عمل Cloud Deploy. لأغراض العرض التوضيحي، أنشأنا ملفات Cloud Deploy نفسها ونقلناها إلى مستودع github مع نموذج لتطبيق go، وسنستخدم Cloud Deploy لإصدار هذا التطبيق.
export REL_TIMESTAMP=$(date '+%Y%m%d-%H%M%S')
gcloud beta deploy releases create \
sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--description="Release demo" \
--build-artifacts=artifacts.json \
--annotations="release-id=rel-${REL_TIMESTAMP}"
مراجعة الإصدار
عند إنشاء إصدار Cloud Deploy، يتم طرحه تلقائيًا في الهدف الأول وهو المعاينة.
- انتقِل إلى <Cloud Deploy> في وحدة تحكّم Google Cloud
- انقر على "sample-app"
ستظهر على هذه الشاشة تمثيل رسومي لخط الإنتاج.
- تأكَّد من ظهور مخطط تفصيلي أخضر على الجانب الأيمن من مربّع المعاينة، ما يعني أنّه تم نشر الإصدار في تلك البيئة.
- يمكنك مراجعة تفاصيل إضافية حول الإصدار من خلال النقر على اسم الإصدار ضمن "تفاصيل الإصدار" في القسم السفلي من الشاشة
- تأكَّد من أنّ الإصدار نشر التطبيق بنجاح، ونفِّذ الأمر التالي في cloushell
gcloud container clusters get-credentials preview --zone us-central1-a && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080
- انقر على رمز معاينة الويب في أعلى يسار الشاشة.
- اختَر "المعاينة على المنفذ 8080".
سيتم توجيهك إلى صفحة جديدة تعرض الرسالة "Hello World!"
- استخدِم
ctrl+cفي الوحدة الطرفية لإنهاء إعادة توجيه المنفذ.
الترويج لإصدار
بعد نشر إصدارك في الهدف الأول (المعاينة) في مسار الإصدار، يمكنك ترقيته إلى الهدف التالي (الإصدار التجريبي). نفِّذ الأمر التالي لبدء العملية.
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
مراجعة العرض الترويجي للإصدار
- انتقِل إلى نموذج تطبيق خط الأنابيب في Google Cloud Console.
- تأكَّد من ظهور مخطط تفصيلي أخضر على الجانب الأيمن من مربّع Canary، ما يعني أنّه تم نشر الإصدار في تلك البيئة.
- التأكّد من نشر التطبيق بشكلٍ صحيح من خلال إنشاء نفق إليه
gcloud container clusters get-credentials canary --zone us-central1-b && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080
- انقر على رمز معاينة الويب في أعلى يسار الشاشة.
- اختَر "المعاينة على المنفذ 8080".
سيتم توجيهك إلى صفحة جديدة تعرض الرسالة "Hello World!"
- استخدِم
ctrl+cفي الوحدة الطرفية لإنهاء إعادة توجيه المنفذ.
الموافقة على إصدار علني
تذكَّر عندما أنشأنا هدفًا للإنتاج من خلال prod.yaml، حدّدنا العلامة requireApproval على أنّها true. سيؤدي ذلك إلى فرض شرط الحصول على موافقة قبل نشر العرض الترويجي في بيئة الإنتاج.
- ترقية إصدار Canary إلى الإصدار العلني باستخدام الأمر التالي
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
- انتقِل إلى نموذج تطبيق خط الأنابيب في Google Cloud Console.
- لاحِظ المؤشر الأصفر الذي يشير إلى "طلب واحد في انتظار المراجعة".
تشير هذه الرسالة إلى أنّ هناك إصدارًا في قائمة الانتظار ليتم نشره في مرحلة الإنتاج، ولكنّه يتطلّب المراجعة والموافقة.
- انقر على الزر "مراجعة" أسفل الإشعار الأصفر مباشرةً.
- في الشاشة التالية، انقر على "مراجعة" مرة أخرى للوصول إلى شاشة الموافقة على الإصدار العلني
- يمكنك مراجعة Manifest Diff للاطّلاع على التغييرات. في هذه الحالة، ملف جديد تمامًا.
- انقر على الزر "موافقة".
- ارجع إلى صفحة مسار التطبيق النموذجي حيث سترى أنّ عملية طرح الإصدار في مرحلة الإنتاج قيد التقدّم.
مراجعة الإصدار العلني
كما هو الحال مع البيئات الأخرى، يمكنك مراجعة عملية النشر عند اكتمالها باتّباع الخطوات أدناه.
- نفِّذ الأمر التالي في Cloud Shell لإنشاء عملية إعادة توجيه المنفذ
gcloud container clusters get-credentials prod --zone us-central1-c && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080
- انقر على رمز معاينة الويب في أعلى يسار الشاشة.
- اختَر "المعاينة على المنفذ 8080".
سيتم توجيهك إلى صفحة جديدة تعرض الرسالة "Hello World!"
- استخدِم
ctrl+cفي الوحدة الطرفية لإنهاء إعادة توجيه المنفذ.