إعداد التطبيق

1. قبل البدء

إعداد البيئة بوتيرة ذاتية

  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. تجهيز مساحة العمل

  1. افتح محرِّر Cloud Shell من خلال الانتقال إلى عنوان URL التالي

https://ide.cloud.google.com

  1. التأكّد من ضبط اسم مشروعك في واجهة سطر الأوامر

gcloud config set project {{project-id}}

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

export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')

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

gcloud services enable \

cloudbuild.googleapis.com \

secretmanager.googleapis.com

  1. منح الحقوق إلى CloudDeploy

gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/clouddeploy.admin ${PROJECT_ID}

gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/container.developer ${PROJECT_ID}

gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/iam.serviceAccountUser ${PROJECT_ID}

gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/clouddeploy.jobRunner ${PROJECT_ID}

  1. في نافذة الوحدة الطرفية، استنسِخ مصدر التطبيق باستخدام الأمر التالي:

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

  1. انتقِل إلى الدليل واضبط مساحة عمل بيئة التطوير المتكاملة على جذر المستودع

cd software-delivery-workshop && rm -rf .git

cd delivery-platform && cloudshell workspace .

3- استخدام نماذج التطبيقات المحدّدة مسبقًا والمخصّصة

يجب أن يتمكّن المطوّرون من الاختيار من بين مجموعة من النماذج الشائعة الاستخدام داخل المؤسسة. ستنشئ عملية الإعداد مجموعة مركزية من مستودعات النماذج المخزَّنة في حسابك على GitHub. في الخطوات اللاحقة، سيتم نسخ مستودعات النماذج هذه وتعديلها لاستخدامها كأساس للتطبيقات الجديدة. في هذا التمرين المعملي، ستملأ مستودع نماذجك ببنية نموذجية متوفرة هنا. يمكنك إضافة نماذجك الخاصة من خلال إضافة مجلدات إضافية مصمَّمة على غرار النموذج.

في هذه الخطوة، ستنشئ مستودعك الخاص لتخزين نماذج التطبيقات من ملفات الأمثلة المتوفّرة. يتم توفير نص برمجي مساعد لتسهيل التفاعلات مع GitHub.

هذه خطوات تُجرى لمرة واحدة وتُستخدم لتعبئة مستودعات النماذج. ستعيد الخطوات المستقبلية استخدام هذه المستودعات.

ضبط إذن الوصول إلى GitHub

تستدعي الخطوات الواردة في هذا البرنامج التعليمي GitHub API لإنشاء المستودعات وضبطها. يجب توفير اسم مستخدم GitHub ورمز دخول شخصي في نقاط مختلفة تلي ذلك. سيساعدك النص البرمجي أدناه في الحصول على القيم وتخزينها كمتغيرات محلية لاستخدامها لاحقًا.

source ./onboard-env.sh

echo Git Username: $GIT_USERNAME

echo Git Base URL: $GIT_BASE_URL

إنشاء مستودع نماذج تطبيقات

يتم توفير نماذج لتطبيقات مع هذا المختبر كمثال على كيفية دمج النماذج الأساسية الخاصة بك. في هذه الخطوة، يمكنك إنشاء نسختك الخاصة من هذه الملفات في مستودع باسم mcd-app-templates في حسابك على GitHub.

  1. نسخ النموذج إلى دليل العمل

cp -R $BASE_DIR/resources/repos/app-templates $WORK_DIR

cd $WORK_DIR/app-templates

  1. إنشاء مستودع بعيد فارغ في حسابك على GitHub

$BASE_DIR/scripts/git/gh.sh create mcd-app-templates

  1. نقل مستودع النماذج إلى مستودعك البعيد

git init && git symbolic-ref HEAD refs/heads/main && git add . && git commit -m "initial commit"

git remote add origin $GIT_BASE_URL/mcd-app-templates

git push origin main

  1. تنظيف دليل العمل

cd $BASE_DIR

rm -rf $WORK_DIR/app-templates

إنشاء مستودع إعدادات أساسية مشترَكة

يستخدم هذا البرنامج التعليمي أداة تُسمى Kustomize تستخدم ملفات إعداد أساسية تشاركها فِرق متعددة، ثم تضع إعدادات خاصة بالتطبيق في الأعلى. يتيح ذلك لفِرق المنصات التوسّع على مستوى العديد من الفِرق والبيئات.

في هذه الخطوة، يمكنك إنشاء مستودع إعدادات مشترَك باسم mcd-shared_kustomize من النماذج المقدَّمة

  1. نسخ النموذج إلى دليل العمل

cp -R $BASE_DIR/resources/repos/shared-kustomize $WORK_DIR

cd $WORK_DIR/shared-kustomize

  1. إنشاء مستودع بعيد فارغ في حسابك على GitHub

$BASE_DIR/scripts/git/gh.sh create mcd-shared_kustomize

  1. نقل مستودع النماذج إلى مستودعك البعيد

git init && git symbolic-ref HEAD refs/heads/main && git add . && git commit -m "initial commit"

git remote add origin $GIT_BASE_URL/mcd-shared_kustomize

git push origin main

  1. تنظيف دليل العمل

cd $BASE_DIR

rm -rf $WORK_DIR/shared-kustomize

بعد إنشاء مستودعات النماذج، ستكون جاهزًا لاستخدامها في إنشاء مثيل تطبيق.

4. إنشاء نسخة جديدة من تطبيق

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

في هذه الخطوة، ستستبدل القيم في نموذج تطبيق وتنشر الملفات الناتجة في مستودع جديد.

تحديد اسم للتطبيق الجديد

export APP_NAME=my-app

استرداد مستودع نماذج Golang

cd $WORK_DIR/

git clone -b main $GIT_BASE_URL/mcd-app-templates app-templates

rm -rf app-templates/.git

cd app-templates/golang

استبدال قيم العناصر النائبة

من أكثر الاحتياجات شيوعًا في عملية الإعداد استبدال المتغيرات في النماذج بالقيم الفعلية المستخدَمة في التطبيق. على سبيل المثال، تقديم اسم التطبيق. ينشئ الأمر التالي نُسخًا من جميع ملفات ‎ .tmpl مع القيم المخزّنة في متغيرات البيئة.

for template in $(find . -name '*.tmpl'); do envsubst < ${template} > ${template%.*}; done

إنشاء مستودع جديد وتخزين الملفات المعدَّلة

  1. إنشاء مستودع بعيد فارغ في حسابك على GitHub

$BASE_DIR/scripts/git/gh.sh create ${APP_NAME}

  1. نقل مستودع النماذج إلى مستودعك البعيد

git init && git symbolic-ref HEAD refs/heads/main && git add . && git commit -m "initial commit"

git remote add origin $GIT_BASE_URL/${APP_NAME}

git push origin main

بعد إنشاء مثيل التطبيق، حان الوقت لتنفيذ عمليات إنشاء متواصلة.

5- ضبط إعدادات التنفيذ المبرمَج لسلسلة العمليات

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

في هذه الخطوة، عليك ضبط GitHub لاستدعاء Google Cloud Build وتنفيذ خط الأنابيب كلما أجرى المستخدمون عملية تثبيت أو وضع علامة على الرمز في مستودعهم.

تفعيل ميزة "الوصول الآمن"

ستحتاج إلى عنصرَين لإعداد وصول آمن إلى مسار تطبيقك. مفتاح واجهة برمجة تطبيقات وسرّ فريد خاص بالمسار

مفتاح واجهة برمجة التطبيقات

يُستخدم مفتاح واجهة برمجة التطبيقات لتحديد العميل الذي يستدعي واجهة برمجة تطبيقات معيّنة. في هذه الحالة، سيكون العميل هو GitHub. من أفضل الممارسات التي لم يتم تناولها هنا هي حصر نطاق مفتاح واجهة برمجة التطبيقات على واجهات برمجة التطبيقات المحدّدة التي سيصل إليها العميل فقط. لقد أنشأت المفتاح في خطوة سابقة.

  1. يمكنك مراجعة المفتاح من خلال النقر على هذا الرابط.
  2. يمكنك التأكّد من ضبط القيمة عن طريق تنفيذ الأمر التالي

echo $API_KEY_VALUE

سرّ مسار العرض

تُستخدَم الأسرار لتفويض المتصل والتأكّد من أنّه لديه الحقوق اللازمة لتنفيذ مهمة معيّنة في هدف الإصدار على السحابة الإلكترونية. قد يكون لديك مستودعان مختلفان في GitHub يجب أن يكون لكل منهما إذن الوصول إلى مساراته الخاصة فقط. في حين أنّ API_KEY يحدّد واجهات برمجة التطبيقات التي يمكن أن يستخدمها GitHub (في هذه الحالة، يتم استدعاء Cloud Build API)، يحدّد السرّ الوظيفة التي يمكن أن ينفّذها العميل في Cloud Build API.

  1. تحديد اسم المفتاح السرّي وموقعه وقيمته

SECRET_NAME=${APP_NAME}-webhook-trigger-cd-secret

SECRET_PATH=projects/${PROJECT_NUMBER}/secrets/${SECRET_NAME}/versions/1

SECRET_VALUE=$(sed "s/[^a-zA-Z0-9]//g" <<< $(openssl rand -base64 15))

  1. إنشاء السر

printf ${SECRET_VALUE} | gcloud secrets create ${SECRET_NAME} --data-file=-

  1. السماح لخدمة Cloud Build بقراءة كلمة المرور

gcloud secrets add-iam-policy-binding ${SECRET_NAME} \

--member=serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-cloudbuild.iam.gserviceaccount.com \

--role='roles/secretmanager.secretAccessor'

إنشاء مشغّل Cloud Build

المشغّل في Cloud Build هو الإعداد الذي سيتم من خلاله تنفيذ عمليات التكامل المستمر والتسليم المستمر.

تتطلّب المهمة توفير بعض القيم الرئيسية عند إنشائها من أجل ضبط المشغّل بشكلٍ صحيح.

  1. تحديد اسم المشغّل ومكان العثور على ملف الإعداد

export TRIGGER_NAME=${APP_NAME}-clouddeploy-webhook-trigger

export BUILD_YAML_PATH=$WORK_DIR/app-templates/golang/build/cloudbuild-cd.yaml

  1. حدِّد موقع مستودع الإعدادات الأساسية المشتركة.

export KUSTOMIZE_REPO=${GIT_BASE_URL}/mcd-shared_kustomize

  1. تم ضبط متغيّر في النص البرمجي onboard-env.sh الذي يحدّد سجلّ حاوية المشروع. راجِع القيمة باستخدام الأمر أدناه.

echo $IMAGE_REPO

  1. أنشئ CloudBuild Webhook Trigger باستخدام المتغيرات التي تم إنشاؤها سابقًا. يتم استرداد موقع مستودع التطبيق من نص الطلب من GitHub. تشير القيمة أدناه إلى المسار في نص الطلب حيث يتم العثور عليهgcloud alpha builds triggers create webhook \
     `--name=${TRIGGER_NAME} \`
    
     `--substitutions='_APP_NAME='${APP_NAME}',_APP_REPO=$(body.repository.git_url),_CONFIG_REPO='${GIT_BASE_URL}'/'${CLUSTER_CONFIG_REPO}',_DEFAULT_IMAGE_REPO='${IMAGE_REPO}',_KUSTOMIZE_REPO='${GIT_BASE_URL}'/'${SHARED_KUSTOMIZE_REPO}',_REF=$(body.ref)' \`
    
     `--inline-config=$BUILD_YAML_PATH \`
    
     `--secret=${SECRET_PATH}`
    
  2. راجِع مشغّل Cloud Build الذي تم إنشاؤه حديثًا في "وحدة التحكّم" من خلال زيارة هذا الرابط.
  3. حدِّد متغيّرًا لعنوان URL لنقطة النهاية، وسيستخدمه GitHub في الخطوة التالية.

WEBHOOK_URL="https://cloudbuild.googleapis.com/v1/projects/${PROJECT_ID}/triggers/${TRIGGER_NAME}:webhook?key=${API_KEY_VALUE}&secret=${SECRET_VALUE}"

ضبط Webhook في GitHub

  1. ضبط الويب هوك في GitHub

$BASE_DIR/scripts/git/gh.sh create_webhook ${APP_NAME} $WEBHOOK_URL

  1. انتقِل إلى مستودع التطبيق وراجِع خطاف الويب الذي تم إعداده حديثًا.

REPO_URL=${GIT_BASE_URL}/${APP_NAME}/settings/hooks

echo $REPO_URL

بعد أن نفّذت يدويًا جميع الخطوات اللازمة لإنشاء تطبيق جديد، حان الوقت لأتمتة هذه العملية في نص برمجي.

6. أتمتة جميع خطوات الإعداد

في الواقع، لا يمكن تنفيذ كل خطوة من الخطوات المذكورة أعلاه لكل تطبيق جديد. بدلاً من ذلك، يجب دمج المنطق في نص برمجي لتسهيل التنفيذ. تم تضمين الخطوات أعلاه في نص برمجي لتتمكّن من استخدامه.

في هذه الخطوة، ستستخدم النص البرمجي المقدَّم لإنشاء تطبيق جديد.

إنشاء تطبيق جديد

  1. التأكّد من أنّك في الدليل الصحيح

cd $BASE_DIR

  1. إنشاء تطبيق جديد

export APP_NAME=demo-app

./app.sh create ${APP_NAME}

يتم تنفيذ جميع الخطوات تلقائيًا.

مراجعة مستودع GitHub

في هذه المرحلة، ستتمكّن من مراجعة المستودع الجديد في Github

  1. استرجِع عنوان URL الخاص بمستودع GitHub من خلال تنفيذ الأمر التالي

echo ${GIT_BASE_URL}/demo-app

  1. افتح عنوان URL باستخدام متصفّح الويب لمراجعة التطبيق الجديد
  2. لاحظ الأمثلة التي تم فيها استبدال متغيّرات النموذج بقيم مثيل كما هو موضّح في عنوان URL أدناه

echo ${GIT_BASE_URL}/demo-app/blob/main/k8s/prod/deployment.yaml#L24

  1. راجِع الويب هوك الذي تم إعداده على عنوان URL أدناه

echo ${GIT_BASE_URL}/demo-app/settings/hooks

مراجعة مشغّل CloudBuild

تم إعداد العامل المشغِّل تلقائيًا بواسطة النص البرمجي

  1. راجِع مشغّل Cloud Build في "وحدة التحكّم" من خلال زيارة هذا الرابط.
  2. راجِع سجلّ الإنشاء في هذه الصفحة