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



- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة من الأحرف لا تستخدمها Google APIs، ويمكنك تعديلها في أي وقت.
- يجب أن يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud، كما أنّه غير قابل للتغيير (لا يمكن تغييره بعد ضبطه). تنشئ Cloud Console تلقائيًا سلسلة فريدة، ولا يهمّك عادةً ما هي. في معظم دروس البرمجة، عليك الرجوع إلى رقم تعريف المشروع (ويتم تحديده عادةً على أنّه
PROJECT_ID)، لذا إذا لم يعجبك، يمكنك إنشاء رقم آخر عشوائي، أو يمكنك تجربة رقمك الخاص ومعرفة ما إذا كان متاحًا. ثم يتم "تجميده" بعد إنشاء المشروع. - هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. يمكنك الاطّلاع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console من أجل استخدام موارد/واجهات برمجة تطبيقات Cloud. لن تكلفك تجربة هذا الدرس البرمجي الكثير من المال، إن وُجدت تكلفة على الإطلاق. لإيقاف الموارد كي لا يتم تحصيل رسوم منك بعد هذا الدرس التطبيقي حول الترميز، اتّبِع أي تعليمات "تنظيف" واردة في نهاية الدرس. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.
2. إعداد مساحة العمل
- افتح محرِّر Cloud Shell من خلال الانتقال إلى عنوان URL التالي
https://ide.cloud.google.com
- التأكّد من ضبط اسم مشروعك في واجهة سطر الأوامر
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)')
- تفعيل واجهات برمجة التطبيقات
gcloud services enable \
cloudbuild.googleapis.com \
secretmanager.googleapis.com
- منح الحقوق إلى 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}
- في نافذة الوحدة الطرفية، استنسِخ مصدر التطبيق باستخدام الأمر التالي:
git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git
- انتقِل إلى الدليل واضبط مساحة عمل بيئة التطوير المتكاملة على جذر المستودع
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.
- نسخ النموذج إلى دليل العمل
cp -R $BASE_DIR/resources/repos/app-templates $WORK_DIR
cd $WORK_DIR/app-templates
- إنشاء مستودع بعيد فارغ في حسابك على GitHub
$BASE_DIR/scripts/git/gh.sh create mcd-app-templates
- إرسال مستودع النموذج إلى مستودعك البعيد
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
- تنظيف دليل العمل
cd $BASE_DIR
rm -rf $WORK_DIR/app-templates
إنشاء مستودع إعدادات أساسية مشترَكة
يستخدم هذا البرنامج التعليمي أداة تُسمى Kustomize تستخدم ملفات الإعداد الأساسية التي تشاركها فِرق متعددة، ثم تضع إعدادات خاصة بالتطبيق في الأعلى. يتيح ذلك لفِرق المنصات التوسّع على مستوى العديد من الفِرق والبيئات.
في هذه الخطوة، يمكنك إنشاء مستودع إعدادات مشترَك باسم mcd-shared_kustomize من النماذج المقدَّمة
- نسخ النموذج إلى دليل العمل
cp -R $BASE_DIR/resources/repos/shared-kustomize $WORK_DIR
cd $WORK_DIR/shared-kustomize
- إنشاء مستودع بعيد فارغ في حسابك على GitHub
$BASE_DIR/scripts/git/gh.sh create mcd-shared_kustomize
- إرسال مستودع النموذج إلى مستودعك البعيد
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
- تنظيف دليل العمل
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
إنشاء مستودع جديد وتخزين الملفات المعدَّلة
- إنشاء مستودع بعيد فارغ في حسابك على GitHub
$BASE_DIR/scripts/git/gh.sh create ${APP_NAME}
- إرسال مستودع النموذج إلى مستودعك البعيد
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. من أفضل الممارسات التي لم يتم تناولها هنا هي حصر نطاق مفتاح واجهة برمجة التطبيقات على واجهات برمجة التطبيقات المحدّدة التي سيصل إليها العميل فقط. لقد أنشأت المفتاح في خطوة سابقة.
- يمكنك مراجعة المفتاح من خلال النقر على هذا الرابط.
- يمكنك التأكّد من ضبط القيمة من خلال تنفيذ الأمر التالي
echo $API_KEY_VALUE
الرمز السري لمسار التعلّم
تُستخدَم الأسرار لتفويض المتصل والتأكّد من أنّه لديه الحقوق اللازمة لتنفيذ مهمة معيّنة في هدف الإصدار على السحابة الإلكترونية. قد يكون لديك مستودعان مختلفان في GitHub يجب أن يكون بإمكانهما الوصول إلى مساراتهما فقط. في حين أنّ API_KEY يحدّد واجهات برمجة التطبيقات التي يمكن أن يستخدمها GitHub (في هذه الحالة، يتم استدعاء Cloud Build API)، يحدّد السرّ الوظيفة التي يمكن أن ينفّذها العميل في Cloud Build API.
- تحديد اسم المفتاح السرّي وموقعه وقيمته
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))
- إنشاء الرمز السري
printf ${SECRET_VALUE} | gcloud secrets create ${SECRET_NAME} --data-file=-
- السماح لخدمة 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 هو الإعداد الذي سيتم من خلاله تنفيذ عمليات CICD.
تتطلّب المهمة توفير بعض القيم الرئيسية عند إنشائها من أجل ضبط المشغّل بشكلٍ سليم.
- تحديد اسم المشغّل ومكان العثور على ملف الإعداد
export TRIGGER_NAME=${APP_NAME}-clouddeploy-webhook-trigger
export BUILD_YAML_PATH=$WORK_DIR/app-templates/golang/build/cloudbuild-cd.yaml
- حدِّد موقع مستودع الإعدادات الأساسية المشتركة.
export KUSTOMIZE_REPO=${GIT_BASE_URL}/mcd-shared_kustomize
- تم ضبط متغيّر في النص البرمجي onboard-env.sh الذي يحدّد سجلّ حاوية المشروع. راجِع القيمة باستخدام الأمر أدناه.
echo $IMAGE_REPO
- أنشئ 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}` - راجِع مشغّل Cloud Build الذي تم إنشاؤه حديثًا في Console من خلال زيارة هذا الرابط.
- حدِّد متغيّرًا لعنوان 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
- إعداد الويب هوك في GitHub
$BASE_DIR/scripts/git/gh.sh create_webhook ${APP_NAME} $WEBHOOK_URL
- انتقِل إلى مستودع التطبيق وراجِع خطاف الويب الذي تم إعداده حديثًا.
REPO_URL=${GIT_BASE_URL}/${APP_NAME}/settings/hooks
echo $REPO_URL
بعد أن نفّذت يدويًا جميع الخطوات اللازمة لإنشاء تطبيق جديد، حان الوقت لأتمتة هذه العملية في نص برمجي.
6. أتمتة جميع خطوات الإعداد
في الواقع، لا يمكن تنفيذ كل خطوة من الخطوات المذكورة أعلاه لكل تطبيق جديد. بدلاً من ذلك، يجب دمج المنطق في نص برمجي لتسهيل التنفيذ. تم تضمين الخطوات أعلاه في نص برمجي لتتمكّن من استخدامه.
في هذه الخطوة، ستستخدم النص البرمجي المقدَّم لإنشاء تطبيق جديد.
إنشاء تطبيق جديد
- التأكّد من أنّك في الدليل الصحيح
cd $BASE_DIR
- إنشاء تطبيق جديد
export APP_NAME=demo-app
./app.sh create ${APP_NAME}
يتم تنفيذ جميع الخطوات تلقائيًا.
مراجعة مستودع GitHub
في هذه المرحلة، ستتمكّن من مراجعة المستودع الجديد في Github
- استرجِع عنوان URL الخاص بمستودع GitHub من خلال تنفيذ الأمر التالي
echo ${GIT_BASE_URL}/demo-app
- افتح عنوان URL باستخدام متصفّح الويب لمراجعة التطبيق الجديد
- لاحظ الأمثلة التي تم فيها استبدال متغيّرات النموذج بقيم مثيل كما هو موضّح في عنوان URL أدناه
echo ${GIT_BASE_URL}/demo-app/blob/main/k8s/prod/deployment.yaml#L24
- راجِع رابط الويب هوك الذي تم إعداده على عنوان URL أدناه
echo ${GIT_BASE_URL}/demo-app/settings/hooks
مراجعة مشغّل CloudBuild
تم إعداد المشغّل تلقائيًا بواسطة النص البرمجي
- راجِع مشغّل Cloud Build في Console من خلال زيارة هذا الرابط.
- مراجعة سجلّ الإنشاء في هذه الصفحة