
يتحدث ضيفنا ، منشئ أدوات تطوير Pantheon ، عن كيفية أتمتة عمليات نشر WordPress باستخدام GitLab CI / CD.
في Pantheon ، أتعامل مع علاقات المطورين ، لذلك أبحث دائمًا عن طرق جديدة لمساعدة مطوري WordPress و Drupal على حل مشكلات الأتمتة في سير العمل. للقيام بذلك ، أود تجربة أدوات جديدة ودمجها مع بعضها البعض من أجل العمل الفعال.
كثيرا ما أرى المطورين يعذبون بخادم تطوير واحد.
متعة للغاية - في انتظار دورك لاستخدام خادم أو إرسال عنوان URL للعملاء مع ملاحظة: "انظر هنا ، ولكن لا تنظر هنا.
تعمل بيئات Multidev - إحدى أدوات Pantheon الرائعة - على حل هذه المشكلة ، لأنه يمكنك من خلالها إنشاء بيئات لفروع Git عند الطلب. لكل بيئة متعددة البرامج عنوان URL وقاعدة بيانات خاصة بها ، وبالتالي فإن المطورين يعملون بهدوء ، ويفحصوا الجودة ويحصلون على الموافقة دون الدخول في أعقاب بعضهم البعض.
ولكن لا يوجد لدى Pantheon أدوات للتحكم في الإصدار أو التكامل والنشر المستمر (CI / CD). ولكن هذه منصة مرنة يمكنك من خلالها دمج أي أدوات.
لقد لاحظت أيضًا أنه من أجل تطوير الفريق ، يستخدمون أداة واحدة وللتجميع والنشر - أدوات أخرى.
على سبيل المثال ، لديهم أدوات مختلفة للتحكم في الإصدار و CI / CD. يجب عليك التبديل بين الأدوات لتعديل التعليمات البرمجية وتشخيص المشكلات.
لدى GitLab مجموعة كاملة من أدوات التطوير: للتحكم في الإصدار ، التذاكر ، طلبات الدمج ، أفضل خط أنابيب CI / CD في الفصل ، سجل للحاويات وجميع تلك الأشياء. لم أحصل على التطبيقات التي سيكون هناك الكثير لإدارة سير عمل التطوير.
أحب الأتمتة ، لذلك تعلمت كيفية توصيل Pantheon بـ GitLab بحيث يتم نشر الالتزام بالفرع الرئيسي في GitLab في بيئة التطوير الرئيسية في Pantheon. ويمكن لدمج الطلبات على GitLab إنشاء شفرة ونشرها في بيئات متعددة البرامج في Pantheon.
في هذا الدليل ، سأوضح لك كيفية إعداد اتصال بين GitLab و Pantheon وتحسين سير عمل WordPress و Drupal.
بالطبع ، يمكنك عمل نسخة متطابقة من مستودع GitLab ، لكننا سنبذل قصارى جهدنا للحفر في GitLab CI ونستخدم هذه الأداة ليس فقط للنشر في المستقبل.
مقدمة
في هذا المنشور ، يجب أن تفهم أن Pantheon يقسم كل موقع إلى ثلاثة عناصر: الرمز وقاعدة البيانات والملفات.
يشتمل الرمز على ملفات CMS ، مثل سمات kernel والإضافات و WordPress. تتم إدارة هذه الملفات في مستودع Git المستضاف من قبل Pantheon ، أي يمكننا نشر الكود من GitLab إلى Pantheon مع Git.
تسمى الملفات الموجودة في Pantheon ملفات الوسائط ، أي صور للموقع. عادةً يتم تنزيلها من قبل المستخدمين ، ويتجاهلها Git.
أنشئ حسابًا مجانيًا ، وتعرف على المزيد حول سير عمل Pantheon ، أو اشترك للحصول على عرض توضيحي على pantheon.io.
الافتراضات
يسمى مشروعي على Pantheon و GitLab pantheon-gitlab-blog-demo
. يجب أن يكون اسم المشروع فريدًا. هنا سنعمل مع موقع ووردبريس. يمكنك أن تأخذ دروبال ، ولكن ستحتاج إلى تغيير شيء ما.
سأستخدم سطر أوامر Git ، ويمكنك العمل في واجهة المستخدم الرسومية إذا أردت.
إنشاء مشروع
للبدء ، قم بإنشاء مشروع GitLab (سنعود إلى ذلك).
الآن قم بإنشاء موقع WordPress على Pantheon . ثم تثبيت ووردبريس لموقع لوحة القيادة.
إذا حكة يديك ، قم بتغيير شيء ما ، على سبيل المثال ، قم بإزالة المكونات الإضافية وإضافتها ، وكن صبورًا. الموقع ليس مرتبطًا بـ GitLab ، ونريد أن تدخل جميع تغييرات الشفرة إلى GitLab.
عند تثبيت WordPress ، نعود إلى لوحة معلومات موقع Pantheon ونغير وضع التطوير إلى Git.

GitLab الالتزام الأولي
أنت الآن بحاجة إلى نقل رمز WordPress الأولي من موقع Pantheon إلى GitLab. للقيام بذلك ، نقوم باستنساخ الكود من مستودع Git لموقع Pantheon محليًا ، ثم نرسله إلى مستودع GitLab.
لجعله أكثر بساطة وأمانًا ، سنضيف مفتاح SSH إلى Pantheon ولن ندخل كلمة المرور في كل مرة نقوم فيها باستنساخ مستودع Pantheon Git. في الوقت نفسه ، سنضيف مفتاح SSH إلى GitLab .
للقيام بذلك ، نقوم باستنساخ موقع Pantheon محليًا عن طريق نسخ الأمر من الحقل Clone with Git على لوحة معلومات الموقع.

إذا كنت بحاجة إلى مساعدة ، اقرأ وثائق Git Getting Started لبانثيون .
الآن قم بتغيير git remote origin
للإشارة إلى GitLab بدلاً من Pantheon. يمكن القيام بذلك git remote
.
دعنا نذهب إلى مشروع GitLab ونسخ عنوان URL الخاص بالمستودع من القائمة المنسدلة Clone في صفحة تفاصيل المشروع. سنختار خيار Clone with SSH ، لأننا قمنا بالفعل بتهيئة مفتاح SSH.

بشكل افتراضي ، git remote
للنسخة المحلية من مستودع تخزين الكود هو origin
. يمكن تغيير ذلك باستخدام git remote set-url origin [URL GitLab]
، حيث نقوم بدلاً من الأقواس بإدخال عنوان URL الفعلي.
أخيرًا ، قم بتشغيل git push origin master --force
إرسال رمز WordPress الخاص بك من Pantheon إلى GitLab.
خيار –force مطلوب مرة واحدة فقط. ثم في أوامر git push
على GitLab لن يكون.
تكوين بيانات الاعتماد والمتغيرات
تذكر كيف أضفنا محليًا مفتاح SSH لتسجيل الدخول إلى Pantheon و GitLab؟ يمكن استخدام الرمز المميز SSH لتخويل GitLab و Pantheon.
GitLab لديه بعض الوثائق كبيرة. دعونا نرى القسم الخاص بمفاتيح SSH عند استخدام Docker المنفذ في المستند على استخدام مفاتيح SSH مع GitLab CI / CD .
الآن سنكمل الخطوتين الأولين: إنشاء زوج جديد من مفاتيح SSH محليًا باستخدام ssh-keygen وإضافة المفتاح الخاص كمتغير إلى المشروع .
ثم قمنا بتعيين SSH_PRIVATE_KEY
كمتغير بيئة GitLab CI / CD في إعدادات المشروع.
في الخطوتين الثالثة والرابعة ، قم بإنشاء ملف .gitlab-ci.yml
بالمحتويات التالية:
before_script: # See https://docs.gitlab.com/ee/ci/ssh_keys/README.html - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null - mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config" - git config --global user.email "$GITLAB_USER_EMAIL" - git config --global user.name "Gitlab CI"
حتى نلتزم .gitlab-ci.yml
، يجب إضافة شيء آخر إليه.
نحن الآن ننفذ الخطوة الخامسة ونضيف المفتاح العام الذي أنشأناه في الخطوة الأولى إلى الخدمات التي تحتاج إلى الوصول إليها في بيئة البناء .
في حالتنا ، نريد الوصول إلى Pantheon من GitLab. اتبع الإرشادات الموجودة في مستند Pantheon لإضافة مفتاح SSH إلى Pantheon وإكمال هذه الخطوة.
تذكر: تم إغلاق SSH في GitLab ، وفتح في Pantheon.
قم بإعداد عدد قليل من متغيرات البيئة. الأول يسمى PANTHEON_SITE. معناها هو اسم موقع Pantheon على جهازك.
يشار إلى الاسم الموجود على الجهاز في نهاية الأمر Clone with Git. لقد قمت بالفعل باستنساخ الموقع محليًا ، لذلك سيكون اسم دليل المستودع المحلي.

بعد ذلك ، قم بإعداد PANTHEON_GIT_URL
البيئة PANTHEON_GIT_URL
. هذا هو عنوان URL لمخزن Git لموقع Pantheon الذي استخدمناه بالفعل.
نقوم فقط بإدخال عنوان URL الخاص بمستودع SSH ، دون git clone
واسم الموقع على الجهاز في النهاية.
تفو. يتم ذلك ، والآن يمكننا إنهاء .gitlab-ci.yml
.
إنشاء مهمة النشر
ما سنفعله في البداية باستخدام GitLab CI يشبه إلى حد بعيد ما فعلناه مع مستودعات Git من قبل. لكن هذه المرة ، أضف مستودع Pantheon كمصدر Git عن بعد ، ثم أرسل الكود من GitLab إلى Pantheon.
للقيام بذلك ، قم بتكوين مرحلة deploy:dev
ومهمة deploy:dev
، لأننا سننشر في بيئة التطوير في Pantheon. نتيجة لذلك ، .gitlab-ci.yml
كما يلي:
stages: - deploy before_script: # See https://docs.gitlab.com/ee/ci/ssh_keys/README.html - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null - mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config" - git config --global user.email "$GITLAB_USER_EMAIL" - git config --global user.name "Gitlab CI" deploy:dev: stage: deploy environment: name: dev url: https://dev-$PANTHEON_SITE.pantheonsite.io/ script: - git remote add pantheon $PANTHEON_GIT_URL - git push pantheon master --force only: - master
يجب أن تبدو المتغيرات SSH_PRIVATE_KEY, PANTHEON_SITE
و PANTHEON_GIT_URL
مألوفة - لقد قمنا بإعداد متغيرات البيئة هذه مسبقًا. باستخدام هذه المتغيرات ، يمكننا استخدام القيم في .gitlab-ci.yml
عدة مرات ، وسنحتاج فقط إلى تحديثها في مكان واحد.
أخيرًا ، قم بإضافة .gitlab-ci.yml
به وإرساله إلى GitLab.
تحقق نشر
إذا فعلنا كل شيء بشكل صحيح ، فستنجح مهمة النشر deploy:dev
في GitLab CI / CD وإرسال التزام .gitlab-ci.yml
إلى Pantheon. لنرى.



نرسل فروع طلبات دمج لبانثيون
هنا سنستخدم ميزة Pantheon المفضلة - multidev ، حيث يمكنك إنشاء بيئات Pantheon إضافية لفروع Git عند الطلب.
الوصول إلى multidev محدود ، لذلك هذا القسم اختياري . ولكن إذا كان لديك وصول ، يمكنك زيادة الإنتاجية بشكل خطير عن طريق إعداد الإنشاء التلقائي لبيئات التشغيل المتعدد على Pantheon من طلبات دمج GitLab.
أولاً ، قم بإنشاء فرع Git جديد محليًا باستخدام git checkout -b multidev-support
. الآن ، مرة أخرى ، سوف يتغير شيء في .gitlab-ci.yml
.
أود الإشارة إلى رقم طلب الدمج في اسم بيئة Pantheon. على سبيل المثال ، طلب الدمج الأول هو mr-1
، والثاني هو mr-2
، إلخ.
يتم تغيير طلب الدمج ، لذلك نحتاج إلى تحديد أسماء فروع Pantheon ديناميكيًا. في GitLab ، هذا بسيط - تحتاج إلى استخدام متغيرات البيئة المحددة مسبقًا .
يمكن أن نأخذ $CI_MERGE_REQUEST_IID
للإشارة إلى رقم طلب الدمج. دعونا نطبق كل ذلك مع متغيرات البيئة العالمية التي حددناها سابقًا ، وإضافة مهمة نشر جديدة: multidev في نهاية .gitlab-ci.yml
.
deploy:multidev: stage: deploy environment: name: multidev/mr-$CI_MERGE_REQUEST_IID url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/ script: # Checkout the merge request source branch - git checkout $CI_COMMIT_REF_NAME # Add the Pantheon git repository as an additional remote - git remote add pantheon $PANTHEON_GIT_URL # Push the merge request source branch to Pantheon - git push pantheon $CI_COMMIT_REF_NAME:mr-$CI_MERGE_REQUEST_IID --force only: - merge_requests
ستكون مشابهة deploy:dev
مهمة deploy:dev
، يتم إرسال الفرع فقط إلى Pantheon ، وليس master
.
لقد قمنا بإضافة .gitlab-ci.yml
المحدث .gitlab-ci.yml
، وسوف نرسل الآن فرعًا جديدًا إلى GitLab git push -u origin multidev-support
.
الآن قم بإنشاء طلب دمج جديد من فرع multidev-support
بالنقر فوق إنشاء طلب دمج .

بعد إنشاء طلب الدمج ، ننظر في كيفية deploy:multidev
CI / CD deploy:multidev
.

See - تم إرسال فرع جديد إلى Pantheon. ولكن إذا ذهبنا إلى قسم multidev على لوحة معلومات موقع Pantheon ، فلن نرى البيئة الجديدة هناك.

ألق نظرة على قسم فروع جيت.

نتيجة لذلك ، وصل فرع mr-1
إلى Pantheon. إنشاء بيئة من فرع mr-1
.

لقد أنشأنا بيئة متعددة البرامج ، ونعود الآن إلى GitLab وننظر إلى قسم العمليات> البيئات . سنرى إدخالات لـ dev
و mr-1
.
هذا لأننا أضفنا name
environment
مسمى و url
إلى مهام CI / CD. إذا نقرنا على أيقونة البيئة المفتوحة ، فسننتقل إلى عنوان URL لبيئة Pantheon multidev.
أتمتة إنشاء multidev
من حيث المبدأ ، يمكنك التوقف هنا وتذكر فقط إنشاء بيئة متعددة البرامج لكل طلب دمج ، ولكن يمكن أتمتة هذه العملية.
يحتوي Pantheon على أداة سطر أوامر Terminus حيث يمكنك العمل مع النظام الأساسي تلقائيًا. في Terminus ، يمكنك إنشاء بيئات متعددة البث من سطر الأوامر - مثالية لـ GitLab CI .
نحتاج إلى طلب دمج جديد لاختباره. قم بإنشاء فرع جديد باستخدام git checkout -b auto-multidev-creation
.
لاستخدام Terminus في مهام GitLab CI / CD ، فإنك تحتاج إلى رمز مميز للمصادقة في Terminus وصورة حاوية مع Terminus.
قم بإنشاء رمز آلة Pantheon وحفظه في مكان آمن وإضافته كمتغير بيئة عام في GitLab باسم PANTHEON_MACHINE_TOKEN
.
إذا نسيت كيفية إضافة متغيرات بيئة GitLab ، فارجع إلى حيث حددنا PANTHEON_SITE
.
إنشاء Dockerfile مع محطة
إذا كنت لا تستخدم Docker أو لا تعجبك Dockerfile
، Dockerfile
registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest
صورة وتخطي هذا القسم.
لدى GitLab سجل حاويات حيث يمكنك إنشاء واستضافة Dockerfile لمشروعنا. دعونا إنشاء Dockerfile مع محطة للعمل مع آلهة.
Terminus هي أداة لسطر الأوامر في PHP ، لذلك دعونا نبدأ مع صورة PHP. أقوم بتثبيت برنامج Terminus خلال الملحن ، لذلك سألتقط صورة Docker Composer الرسمية كأساس. قم بإنشاء Dockerfile
في دليل المستودع المحلي بالمحتويات التالية:
# Use the official Composer image as a parent image FROM composer:1.8 # Update/upgrade apk RUN apk update RUN apk upgrade # Make the Terminus directory RUN mkdir -p /usr/local/share/terminus # Install Terminus 2.x with Composer RUN /usr/bin/env COMPOSER_BIN_DIR=/usr/local/bin composer -n --working-dir=/usr/local/share/terminus require pantheon-systems/terminus:"^2"
اتبع الإرشادات الخاصة بتجميع وإرسال الصور من قسم Build and push images في وثائق سجل الحاوية لجمع الصورة من Dockerfile
وإرسالها إلى GitLab.
افتح قسم التسجيل في مشروع GitLab. إذا سارت الأمور وفقًا للخطة ، فستكون هناك صورتنا. قم .gitlab-ci.yml
الارتباط إلى علامة الصورة - نحتاجه .gitlab-ci.yml
.

قسم script
في deploy:multidev
تبدأ deploy:multidev
في النمو ، لذلك دعونا deploy:multidev
إلى ملف منفصل. قم private/multidev-deploy.sh:
جديد private/multidev-deploy.sh:
#!/bin/bash # Store the mr- environment name export PANTHEON_ENV=mr-$CI_MERGE_REQUEST_IID # Authenticate with Terminus terminus auth:login --machine-token=$PANTHEON_MACHINE_TOKEN # Checkout the merge request source branch git checkout $CI_COMMIT_REF_NAME # Add the Pantheon Git repository as an additional remote git remote add pantheon $PANTHEON_GIT_URL # Push the merge request source branch to Pantheon git push pantheon $CI_COMMIT_REF_NAME:$PANTHEON_ENV --force # Create a function for determining if a multidev exists TERMINUS_DOES_MULTIDEV_EXIST() { # Stash a list of Pantheon multidev environments PANTHEON_MULTIDEV_LIST="$(terminus multidev:list ${PANTHEON_SITE} --format=list --field=id)" while read -r multiDev; do if [[ "${multiDev}" == "$1" ]] then return 0; fi done <<< "$PANTHEON_MULTIDEV_LIST" return 1; } # If the mutltidev doesn't exist if ! TERMINUS_DOES_MULTIDEV_EXIST $PANTHEON_ENV then # Create it with Terminus echo "No multidev for $PANTHEON_ENV found, creating one..." terminus multidev:create $PANTHEON_SITE.dev $PANTHEON_ENV else echo "The multidev $PANTHEON_ENV already exists, skipping creating it..." fi
يكمن البرنامج النصي في دليل خاص ولا يوفر الوصول إلى الويب على Pantheon . لدينا برنامج نصي لمنطق multidev لدينا. لنقم الآن بتحديث deploy:multidev
.gitlab-ci.yml
للحصول على هذا:
deploy:multidev: stage: deploy environment: name: multidev/mr-$CI_MERGE_REQUEST_IID url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/ script: # Run the multidev deploy script - "/bin/bash ./private/multidev-deploy.sh" only: - merge_requests
نحتاج إلى التأكد من تنفيذ مهامنا في الصورة المخصصة التي تم إنشاؤها ، لذلك نضيف image
التعريف بعنوان URL الخاص .gitlab-ci.yml
في .gitlab-ci.yml
. نتيجة لذلك ، حصلنا على .gitlab-ci.yml
التالي:
image: registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest stages: - deploy before_script: # See https://docs.gitlab.com/ee/ci/ssh_keys/README.html - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null - mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config" - git config --global user.email "$GITLAB_USER_EMAIL" - git config --global user.name "Gitlab CI" deploy:dev: stage: deploy environment: name: dev url: https://dev-$PANTHEON_SITE.pantheonsite.io/ script: - git remote add pantheon $PANTHEON_GIT_URL - git push pantheon master --force only: - master deploy:multidev: stage: deploy environment: name: multidev/mr-$CI_MERGE_REQUEST_IID url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/ script: # Run the multidev deploy script - "/bin/bash ./private/multidev-deploy.sh" only: - merge_requests
إضافة ، ارتكاب وإرسال ملف private/multidev-deploy.sh
و .gitlab-ci.yml
. عد الآن إلى GitLab وانتظر مهمة CI / CD. التحلي بالصبر: قد يستغرق multidev عدة دقائق.
ثم نذهب لمشاهدة قائمة multidev على البانتيون. يا معجزة! بيئة multidev mr-2
موجودة بالفعل هنا.

استنتاج
كسب فريقي الكثير من المرح عندما بدأنا في فتح طلبات الدمج وإنشاء البيئات تلقائيًا.
باستخدام أدوات GitLab و Pantheon القوية ، يمكنك توصيل GitLab إلى Pantheon تلقائيًا.
بمجرد استخدام GitLab CI / CD ، سيكون سير العمل لدينا هو المكان المناسب للنمو. إليك بعض الأفكار للبدء:
اكتب رأيك في GitLab و Pantheon والأتمتة.
ملاحظة: هل تعلم أن Terminus ، أداة سطر أوامر Pantheon ، يمكن توسيعها من خلال الإضافات ؟
لقد عملنا بجد في Pantheon على الإصدار 2 من المكون الإضافي الخاص بنا لأدوات إنشاء Terminus التي تدعم GitLab. إذا كنت لا تريد العبث بالإعدادات الخاصة بكل مشروع ، فجرب هذا البرنامج المساعد وساعدنا في اختبار الإصدار التجريبي v2. بالنسبة إلى Terminus build:project:create
command ، ستحتاج فقط إلى الرمز المميز Pantheon ورمز GitLab. ستقوم بنشر مشروع مثال واحد مع الملحن والاختبار الآلي ، وإنشاء مشروع جديد في GitLab ، موقع Pantheon الجديد ، وتوصيلهم باستخدام متغيرات البيئة ومفاتيح SSH.
عن المؤلف
أندرو تايلور يخلق أدوات مطورة في بانثيون .