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

1. قبل البدء

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها واجهات برمجة تطبيقات Google، ويمكنك تعديلها في أي وقت.
  • يجب أن يكون معرّف المشروع فريدًا في جميع مشاريع 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. انتقِل إلى الدليل واضبط مساحة عمل IDE على جذر المستودع.

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" هو الإعداد الذي سينفِّذ عمليات CICD فعليًا.

تتطلب المهمة تقديم بعض القيم الأساسية عند الإنشاء من أجل ضبط المُشغِّل بشكل صحيح.

  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. أنشئ عامل تشغيل Webhook في CloudBuild باستخدام المتغيّرات التي تم إنشاؤها سابقًا. يتم سحب موقع مستودع التطبيقات من نص الطلب من 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 الذي تم إنشاؤه حديثًا في Console من خلال زيارة هذا الرابط.
  3. حدِّد متغيّرًا لعنوان URL لنقطة النهاية، والذي سيستخدمه GitHub في الخطوة التالية.

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

ضبط رابط الردّ التلقائي على ويب في GitHub

  1. ضبط رابط الردّ التلقائي على الويب في GitHub

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

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

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. راجِع سجلّ الإصدارات في هذه الصفحة.