1. الأهداف
في هذا الدليل التعليمي، ستُنشئ ثلاث مجموعات على GKE باسم "الإصدار التجريبي" و"الإصدار التجريبي العلني" و"الإصدار العلني". بعد ذلك، عليك إنشاء هدف Cloud Deploy لكل مجموعة عنقودية ومسار Cloud Deploy الذي سيحدّد تسلسل الخطوات لتنفيذ عملية النشر في هذه الأهداف.
سيتم بدء عملية النشر من خلال مسار بيانات cloudbuild الذي سينشئ إصدار Cloud Deploy وينفّذ عملية النشر في مجموعة الاختبار التجريبي. بعد التأكّد من نجاح عملية النشر في مرحلة المعاينة وعمل الإصدار على النحو المتوقّع، عليك ترقية الإصدار يدويًا في مجموعة الإصدارات التجريبية. سيتطلب الترويج للإصدار في مجموعة الإنتاج الموافقة، ويجب الموافقة على مسار الإنتاج في واجهة مستخدم Cloud Deploy ثم الترويج له أخيرًا.
يمكن تقسيم أهداف هذا الدليل التعليمي إلى الخطوات التالية:
- تجهيز مساحة العمل
- تحديد استهدافات Cloud Deploy
- تحديد مسار Cloud Deploy
- إنشاء إصدار
- ترقية عملية نشر
- الموافقة على إصدار علني
إعداد البيئة حسب وتيرة الطالب واحتياجاته
- سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.
- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها واجهات برمجة تطبيقات Google، ويمكنك تعديلها في أي وقت.
- يجب أن يكون معرّف المشروع فريدًا في جميع مشاريع 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
- نسخة طبق الأصل من المستودع
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 باستخدام الأمر التالي في CloudShell:
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 باستخدام الأمر التالي في cloudshell:
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 باستخدام الأمر التالي في CloudShell:
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 التي تم ضبطها على true. لن يسمح هذا الإجراء بعرض المحتوى الترويجي في حملة الإصدار العلني إلى أن تتم الموافقة عليه. يجب أن يكون لديك دور 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 باستخدام الأمر التالي في CloudShell:
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
على علامة باسم stages وهي قائمة بجميع الاستهدافات التي تم ضبط مسار الإرسال هذا للنشر فيها.
يحدِّد targetId
الهدف المحدّد لاستخدامه في هذه المرحلة من مسار الإرسال. القيمة هي سمة metadata.name من تعريف الهدف.
profiles
هي قائمة بأسماء ملفات Skaffold الشخصية بدون اسم أو أكثر، من skaffold.yaml. يستخدم Cloud Deploy الملف الشخصي مع ميزة skaffold render عند إنشاء الإصدار.
- تطبيق مسار الإحالة الناجحة
gcloud beta deploy apply --file deploy/pipeline.yaml
4. مرحلة التطوير
أثناء تطوير التطبيقات، ستنشئ مجموعات أدوات CICD المبرمَجة مواد العرض وتخزّنها. يتم تنفيذ الأوامر التالية لإنشاء التطبيق باستخدام skaffold وتخزين مواد العرض للنشر باستخدام Cloud Deploy. ستُنفّذ عملية CICD هذه الخطوة لكل إصدار من إصدارات التطبيق.
- إنشاء التطبيق وتخزينه باستخدام skaffold
skaffold build \
--file-output=artifacts.json \
--default-repo gcr.io/$PROJECT_ID \
--push=true
5- مرحلة الإصدار
في نهاية عملية CICD، عادةً عندما يتم وضع علامة على الرمز البرمجي للإصدار، ستبدأ عملية الإصدار من خلال طلب الأمر 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 Console.
- انقر على 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.
سينقلك هذا الإجراء إلى صفحة جديدة تعرض الرسالة "مرحبًا بالجميع".
- استخدِم
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.
سينقلك هذا الإجراء إلى صفحة جديدة تعرض الرسالة "مرحبًا بالجميع".
- استخدِم
ctrl+c
في وحدة التحكّم لإنهاء إعادة توجيه المنفذ.
الموافقة على إصدار علني
تذكَّر أنّنا عندما أنشأنا هدف الإصدار العلني من خلال prod.yaml، حدّدنا العلامة requireApproval على أنّها true. سيؤدي ذلك إلى فرض شرط الموافقة على العرض الترويجي في قناة الإصدار العلني.
- ترقية الإصدار التجريبي إلى الإصدار العلني باستخدام الأمر التالي
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
- انتقِل إلى مسار الإحالة الناجحة لتطبيق النموذج في Google Cloud Console.
- لاحِظ المؤشر الأصفر الذي يشير إلى "طلب واحد في انتظار المراجعة".
تشير هذه الرسالة إلى أنّ هناك إصدارًا في انتظار النشر في قناة الإصدار العلني، ولكنّه يتطلّب المراجعة والموافقة.
- انقر على الزر "مراجعة" أسفل الإشعار الأصفر مباشرةً.
- في الشاشة التالية، انقر على "مراجعة" مرة أخرى للوصول إلى شاشة الموافقة على الإصدار العلني.
- يمكنك اختياريًا مراجعة "اختلاف البيان" لمراجعة التغييرات. في هذه الحالة، ملف جديد بالكامل.
- انقر على الزر "موافقة".
- ارجع إلى صفحة مسار الإصدار لتطبيق النموذج حيث سترى أنّ عملية الإصدار إلى قناة الإصدار العلني قيد التقدّم.
مراجعة الإصدار العلني
كما هو الحال مع البيئات الأخرى، يمكنك مراجعة عملية النشر عند اكتمالها باستخدام الخطوات أدناه.
- شغِّل الأمر التالي في CloudShell لإنشاء إعادة توجيه المنفذ.
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.
سينقلك هذا الإجراء إلى صفحة جديدة تعرض الرسالة "مرحبًا بالجميع".
- استخدِم
ctrl+c
في وحدة التحكّم لإنهاء إعادة توجيه المنفذ.