طرح الميزة باستخدام "النشر عبر السحابة الإلكترونية"

1. الأهداف

ستنشئ في هذا البرنامج التعليمي ثلاث مجموعات من GKE اسمها "المعاينة" و"الكناري" و"الإنتاج". بعد ذلك، يمكنك إنشاء هدف "النشر في السحابة الإلكترونية" يكون متوافقًا مع كل مجموعة ومسار "النشر في السحابة الإلكترونية" لتحديد تسلسل خطوات النشر في هذه الأهداف.

سيتم بدء عملية النشر من خلال مسار إنشاء السحابة الإلكترونية الذي سينشئ إصدار Cloud Deploy وسينفّذ عملية النشر في مجموعة المعاينة. بعد التحقُّق من نجاح النشر في المعاينة ونجاحه في العمل كما هو متوقَّع، يمكنك ترقية الإصدار يدويًا في مجموعة Canary. ستتطلب عملية الترويج للإصدار في مجموعة الإنتاج الحصول على موافقة، وعليك الموافقة على مسار الإنتاج في واجهة مستخدم Cloud Deployment (النشر في السحابة الإلكترونية) والترويج له في النهاية.

يمكن تقسيم أهداف هذا البرنامج التعليمي إلى الخطوات التالية:

  • إعداد مساحة العمل
  • تحديد أهداف النشر في السحابة الإلكترونية
  • تحديد مسار النشر في السحابة الإلكترونية
  • إنشاء إصدار
  • ترقية عملية نشر
  • الموافقة على إصدار علني

إعداد بيئة ذاتية

  1. سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

2. إعداد النظام الأساسي

جارٍ تحضير مساحة العمل

سنقوم بإعداد البيئة الخاصة بنا هنا المطلوبة لتشغيل هذا البرنامج التعليمي. عند اكتمال هذه الخطوة، سيتم إنشاء مجموعة GKE حيث يمكننا تشغيل عمليات النشر.

  1. ضبط الإعدادات التلقائية لإعدادات gcloud

gcloud config set project <your project>

gcloud config set deploy/region us-central1

  1. مستودع النُسخ المستخرَجة

git clone https://github.com/gushob21/software-delivery-workshop

cd software-delivery-workshop/labs/cloud-deploy/

cloudshell workspace .

rm -rf deploy && mkdir deploy

  1. ضبط متغيّرات البيئة

export PROJECT_ID=$(gcloud config get-value project)

export PROJECT_NUMBER=$(gcloud projects list --filter="$PROJECT_ID" --format="value(PROJECT_NUMBER)")

  1. تفعيل واجهات برمجة التطبيقات

gcloud services enable \

cloudresourcemanager.googleapis.com \

    `container.googleapis.com \`

    `cloudbuild.googleapis.com \`

    `containerregistry.googleapis.com \`

    `secretmanager.googleapis.com \`

    `clouddeploy.googleapis.com` 
  1. إنشاء مجموعات 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

تحديد أهداف النشر عبر السحابة الإلكترونية

  1. أنشئ ملفًا في دليل النشر يُسمّى 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.
  1. أنشِئ ملفًا في دليل النشر يُسمى 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

  1. أنشئ ملفًا في دليل النشر باسم 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

لاحظ أن العلامة تتطلب الموافقة التي تم ضبطها على "صحيح". في هذه الحالة، لن يسمح هذا الإجراء بإدراج الترويج في هدف الإنتاج إلا بعد الحصول على الموافقة. يجب الحصول على أدوار/clouddeploy.approver للموافقة على إصدار.

  1. إنشاء أهداف النشر
         `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 لأداء الإصدارات التلقائية واختبار التكامل وعمليات النشر. تُعدّ الخطوات التالية جزءًا من عملية إعداد تطبيق جديد. سيكون لكل تطبيق جديد مسار نشر تم إعداده.

تحديد مسار النشر في السحابة الإلكترونية

  1. أنشِئ ملفًا في دليل النشر المُسمّى piline.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 على علامة باسم المراحل، وهي قائمة بجميع الأهداف التي تم إعداد مسار التسليم هذا لنشرها.

تحدد السمة targetId الهدف المحدّد الذي يمكن استخدامه لهذه المرحلة من مسار التسليم. القيمة هي السمة data.name من التعريف الهدف.

profiles هي قائمة تحتوي على صفر أو أكثر من أسماء الملفات الشخصية في Skaffold، من skaffold.yaml. تستخدم ميزة "النشر في السحابة الإلكترونية" الملف الشخصي الذي يتم عرضه بسهولة عند إنشاء الإصدار.

  1. تطبيق المسارات

gcloud beta deploy apply --file deploy/pipeline.yaml

4. مرحلة التطوير

ومع تطوير التطبيقات، ستعمل سلاسل أدوات CICD الآلية على إنشاء الأصول وتخزينها. يتم تنفيذ الأوامر التالية لإنشاء التطبيق باستخدام skaffold وتخزين الأصول للنشر باستخدام Cloud Deploy. سيتم تنفيذ هذه الخطوة من خلال عملية CICD لكل عملية إصدار من التطبيقات.

  1. إنشاء التطبيق وتخزينه باستخدام skaffold

skaffold build \

--file-output=artifacts.json \

--default-repo gcr.io/$PROJECT_ID \

--push=true

5- مرحلة الإصدار

في نهاية عملية إصدار CICD، يمكنك عادةً بدء عملية الإصدار من خلال استدعاء الأمر cloud deploy release عندما يتم وضع علامة على الرمز لاستخدامه في مرحلة الإنتاج. في وقت لاحق بعد التحقّق من صحة عملية النشر والموافقة عليها، عليك نقل الإصدار عبر البيئات المستهدفة المختلفة من خلال الترويج للإجراء والموافقة عليه من خلال عمليات مبرمَجة أو موافقات يدوية.

إنشاء إصدار

لقد أنشأنا ملفات النشر في السحابة الإلكترونية في هذا البرنامج التعليمي سابقًا لفهم كيفية عمل ميزة "النشر في السحابة الإلكترونية". لغرض العرض التوضيحي، أنشأنا ملفات النشر في السحابة الإلكترونية نفسها وأرسلناها إلى مستودع github باستخدام نموذج Go، وسنستخدم "النشر عبر السحابة الإلكترونية" لإطلاق هذا التطبيق.

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}"

مراجعة الإصدار

عند إنشاء إصدار من ميزة "النشر في السحابة الإلكترونية"، يتم طرحه تلقائيًا في أول هدف وهو المعاينة.

  1. انتقِل إلى <Cloud Deployment>. في Google Cloud Console
  2. انقر على "نموذج تطبيق"

ستشاهد على هذه الشاشة تمثيلاً بيانيًا لمسار التعلّم.

  1. تأكَّد من ظهور مخطط أخضر على يمين مربّع المعاينة، ما يعني أنّه تم نشر الإصدار في تلك البيئة.
  2. يمكنك مراجعة تفاصيل إضافية حول الإصدار من خلال النقر على اسم الإصدار ضمن "تفاصيل الإصدار" في القسم السفلي من الشاشة.
  3. تحقق من نشر التطبيق بنجاح، شغِّل الأمر التالي 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

  1. انقر على رمز معاينة الويب في أعلى يسار الشاشة.
  2. اختَر "معاينة" في المنفذ 8080

سينقلك هذا إلى صفحة جديدة تعرض الرسالة "مرحبًا أيها العالم!"

  1. يمكنك استخدام ctrl+c في محطة الدفع لإنهاء عملية النقل للأمام.

الترويج لإصدار

الآن بعد أن تم نشر إصدارك إلى أول هدف (معاينة) في المرحلة، يمكنك ترقية الإصدار إلى الهدف التالي (إصدار Canary). شغّل الأمر التالي لبدء العملية.

gcloud beta deploy releases promote \

--release=sample-app-release-${REL_TIMESTAMP} \

--delivery-pipeline=sample-app \

--quiet

مراجعة العرض الترويجي للإصدار

  1. انتقِل إلى مسار نموذج التطبيق في وحدة التحكّم في Google Cloud.
  2. يجب التأكّد من وجود مخطط أخضر اللون على يمين مربّع إصدار Canary، ما يعني أنّه تم نشر الإصدار في تلك البيئة.
  3. التحقُّق من نشر التطبيق بشكلٍ صحيح من خلال إنشاء اتصال نفقي له

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

  1. انقر على رمز معاينة الويب في أعلى يسار الشاشة.
  2. اختَر "معاينة" في المنفذ 8080

سينقلك هذا إلى صفحة جديدة تعرض الرسالة "مرحبًا أيها العالم!"

  1. يمكنك استخدام ctrl+c في محطة الدفع لإنهاء عملية النقل للأمام.

الموافقة على إصدار علني

تذكر أنه عندما أنشأنا هدف المنتج من خلال prod.yaml، حدّدنا العلامة requestApproval كما هي صحيحة. سيؤدي ذلك إلى ضرورة الحصول على الموافقة للترويج في الإنتاج.

  1. ترقية إصدار Canary إلى قناة الإصدار العلني باستخدام الأمر التالي

gcloud beta deploy releases promote \

--release=sample-app-release-${REL_TIMESTAMP} \

--delivery-pipeline=sample-app \

--quiet

  1. انتقِل إلى مسار نموذج التطبيق في وحدة التحكّم في Google Cloud.
  2. لاحِظ المؤشر الأصفر يشير إلى أنّ الرسالة "1 في انتظار المراجعة".

تشير هذه الرسالة إلى وجود إصدار في قائمة انتظار النشر في الإنتاج ولكنه يتطلب المراجعة والموافقة.

  1. انقر على "مراجعة" أسفل الإشعار الأصفر مباشرةً.
  2. في الشاشة التالية، انقر على "مراجعة" مرة أخرى للوصول إلى شاشة الموافقة على قناة الإنتاج
  3. يمكنك مراجعة فرق البيان لمراجعة التغييرات. وهو في هذه الحالة ملف جديد بالكامل.
  4. انقر على "موافقة" زر
  5. ارجع إلى صفحة مسار إنشاء التطبيق حيث سترى الإصدار إلى الإنتاج قيد التقدّم.

مراجعة إصدار مرحلة الإنتاج

كما هو الحال مع البيئات الأخرى، يمكنك مراجعة عملية النشر عند اكتمالها باستخدام الخطوات الواردة أدناه.

  1. نفِّذ الأمر التالي على cloudshell لإنشاء بروتوكول Port-forward

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

  1. انقر على رمز معاينة الويب في أعلى يسار الشاشة.
  2. اختَر "معاينة" في المنفذ 8080

سينقلك هذا إلى صفحة جديدة تعرض الرسالة "مرحبًا أيها العالم!"

  1. يمكنك استخدام ctrl+c في محطة الدفع لإنهاء عملية النقل للأمام.