
تفاجأت هبر قليلاً بوجود عدد قليل جدًا من المقالات المنشورة حول موضوع (بيتا) ميزات جيثب - الإجراءات.
يبدو أن هذا التقليل يمكن تفسيره من خلال حقيقة أن الوظيفة لا تزال في الاختبار ، وإن كانت "تجريبية". لكنها ميزة تجريبية مفيدة تتيح لك استخدام هذه الأداة في المستودعات الخاصة. يتعلق الأمر بالعمل مع هذه التقنية التي سأناقشها في هذه المقالة.
قبل التاريخ
إذا بدأت بالترتيب ، فيجب أن تذكر على الأرجح أنه أثناء عملية البحث عن خيار سريع ومريح وسهل ومجاني لتخزين موقعك الشخصي "عني" كان علي قضاء عدة ليال واستعراض العديد من المقالات.
يختار شخص ما الاستضافة ، شخص ما خادمًا سحابيًا ، وأولئك الذين لا يرغبون في فهم العمل والتفاعل ودفع كل هذا - مثل تحميل مواقع ثابتة على المستودع ، حيث يمكن الآن القيام بذلك على GitHub و GitLab .
بالطبع ، هذا هو الاختيار الشخصي للجميع.
كان خياري الأخير لصالح صفحات جيثب.
حول الصفحاتبصرف النظر عن عدم معرفته ، تعد gh-pages
خيارًا لتخزين الوثائق في شكل موقع ويب ويتم توفيرها مجانًا ، بالإضافة إلى الوثائق ، يُقترح تخزين المواقع الشخصية أيضًا. يتم توفير هذه الوظيفة عن طريق GitHub لجميع المستخدمين وهي متوفرة في إعدادات المستودع.
لمستودع المشروع ، يتم استخدام فرع gh-pages
، لموقع المستخدم ، يتم استخدام مستودع منفصل يسمى username.imtqy.com
مع رموز مصدر الموقع في الفرع master
.
يمكنك الاطلاع على الوثائق لمزيد من التفاصيل ، لكنني سألاحظ فقط أن GitHub مع الكرم المدهش يسمح للجميع بربط مجالهم الخاص بمثل هذا الموقع ببساطة عن طريق إضافة ملف CNAME
باسم المجال وإعداد DNS لموفر النطاق الخاص به على خادم GitHub.
أنا متأكد من أن هناك العديد من المقالات حول كيفية نشر مثل هذا الموقع ، لذلك لا يتعلق الأمر بذلك.
حدوث مشكلة
كانت المشكلة أنه عند استخدام مولد ثابت هناك حاجة لتكوين إضافية ركائز البرامج النصية واستخدام المكتبات لتبسيط عملية إنشاء الصفحات وتحميلها في المستودع. ببساطة ، إذا قمت بتخزين الكود المصدر في مستودع خاص منفصل ، في كل مرة تقوم فيها بإجراء أي تغييرات على الموقع ، كان من الضروري نشر بيئة محلية لتوليد الصفحات الثابتة اللاحقة ونشرها في مستودع الموقع الرئيسي.
هناك وفرة من المولدات الكهربائية الساكنة وجميعهم لديهم نفس المشكلة. تستغرق هذه الإجراءات الكثير من الوقت والجهد ، وكنتيجة لذلك تتوقف عن العمل على الموقع ، خاصة بعد عدة عمليات ترحيل من نظام التشغيل إلى نظام التشغيل أو حوادث مع فقد البيانات على محركات الأقراص الصلبة (كان هذا هو الحال في حالتي) .
في الآونة الأخيرة فقط ، إما في إشعار منبثق على الموقع أو في النشرة الإخبارية من GitHub ، تم ملاحظة وجود CI / CD تم إنشاؤه حديثًا ، مما سمح بتنفيذ هذه الإجراءات بأقل جهد ممكن.
حول مولدات الصفحة الثابتةلن أركز على هذه الفقرة الفرعية ، لكنني سأشارك بعض الأطروحات التي جئت إليها أثناء اختيار واستخدام هذه:
1) يجدر اختيار مولد للغة البرمجة الخاصة بك ، أو الذي كان واضحًا قدر الإمكان. لقد جئت إلى هذه الفكرة في وقت اضطررت فيه إلى إضافة بعض الوظائف للموقع ، وأخذ عكازين لمزيد من الثبات والأتمتة. بالإضافة إلى ذلك ، هذا سبب وجيه لكتابة وظائف إضافية في شكل ملحقات إضافية ؛
2) ما هو المولد الذي يجب الاستمرار فيه هو اختيار شخصي ، لكن تجدر الإشارة إلى أنه من أجل الانغماس الأولي في وظيفة وظائف GitHub Pages ، يجب عليك أولاً تثبيت Jekyll . لحسن الحظ ، يسمح لك بإنشاء موقع من المصدر مباشرة في المستودع (سأكرر هذا باختياري) .
ويستند اختياري للمولد على النقطة الأولى. البجع ، الذي كتب في بيثون ، استبدل بسهولة غريبًا بالنسبة لي جيكل (يستخدم منذ عام تقريبًا) . ونتيجة لذلك ، حتى في إنشاء المقالات وتحريرها ، فإن روبوتًا على موقع ما يمنحني خبرة إضافية بلغة ممتعة بالنسبة لي.
__
بيان المشكلة
ستكون المهمة الرئيسية لكتابة مثل هذا البرنامج النصي (في الواقع ملف التكوين) الذي من شأنه أن يولد تلقائيا صفحات ثابتة من مستودع خاص. سوف يستخدم الحل وظائف البيئة الافتراضية. سيضيف البرنامج النصي نفسه الصفحات النهائية إلى المستودع العام.
أدوات الحل
الأدوات التي سوف نستخدمها لحل المشكلة:
- جيثب الإجراءات ؛
- بيثون 3.7
- البجع.
- بوابة.
- جيثب الصفحات.
حل المشكلات
إجمالاً ، بعد أن تعرفت على الوثائق قليلاً وحصلت على كيفية كتابة البرامج النصية الخاصة بالإجراءات ، أصبح من الواضح أن هذه الآلية ستحل المشكلة تمامًا. في وقت كتابة هذا التقرير ، لاستخدام هذه الوظيفة ، يجب عليك الاشتراك في الاختبار التجريبي !

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

مثال نموذج نصي فارغ
التعليق لفترة وجيزة على النموذج name: CI # : Actions on: [push] # , jobs: # , build: # , .. runs-on: ubuntu-latest # .. steps: # - uses: actions/checkout@v1 # - name: Run a one-line script # 1 run: echo Hello, world! # 1 (bash- ) - name: Run a multi-line script # 2 run: | # 2 () echo Add other actions to build, echo test, and deploy your project.
دعنا نكتب بنفسك على أساس القالب:
0) يمكن ترك الاسم و "CI". إنها مسألة ذوق.
1) بعد ذلك ، تحتاج إلى تحديد الإجراء / المشغل الذي سيؤدي إلى إطلاق البرنامج النصي ، وفي حالتنا هذا هو الضغط المعتاد لالتزام جديد بالمستودع.
on: push
2) سيتم أيضًا ترك الصورة التي سيتم تشغيل البرنامج النصي على أساسها كمثال ، لأن أوبونتو راض تمامًا عن الوظائف الضرورية. بالنظر إلى الأدوات المتاحة ، يصبح من الواضح أن هذا يمكن أن يكون أي صورة ضرورية أو ملائمة فقط (أو حاوية عامل بناء على ذلك).
build: runs-on: ubuntu-latest
3) في الخطوات ، قم أولاً بإعداد البيئة للتحضير للعمل الرئيسي.
3.1) انتقل إلى الفرع الذي نحتاج إليه (خطوة checkout
القياسية):
- uses: actions/checkout@v1
3.2) تثبيت بايثون:
- name: Set up Python uses: actions/setup-python@v1 with: python-version: 3.7
3.3) تعيين تبعيات مولد لدينا:
- name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt
3.4) إنشاء دليل يتم فيه إنشاء صفحات الموقع:
- name: Make output folder run: mkdir output
4) لكي يكون العمل على الموقع متسقًا ، أي عدم حذف التغييرات السابقة وإضافة التغييرات إلى مستودع الموقع دون تعارض ، فإن الخطوة التالية هي استنساخ مستودع الموقع في كل مرة:
- name: Clone master branch run: git clone "https://${{ secrets.ACCESS_TOKEN }}@github.com/${GITHUB_ACTOR}/${GITHUB_ACTOR}.imtqy.com.git" --branch master --single-branch ./output
تستدعي هذه الخطوة متغيرات النظام:
GITHUB_ACTOR
GitHub بتعيين المتغير نفسه ، وهذا هو اسم المستخدم الذي تسبب في تشغيل البرنامج النصي ؛secrets.ACCESS_TOKEN
هو رمز تم إنشاؤه للتحكم في Github ، يمكننا نقله كمتغير بيئة عن طريق تعيين إعدادات مستودعنا في علامة التبويب Secrets
. يرجى ملاحظة أنه عند إنشاء رمز مميز ، سيتم تزويدنا مرة واحدة ، ولن يكون هناك المزيد من الوصول إليه. وكذلك قيم الأسرار.
5) ننتقل إلى إنشاء صفحاتنا:
- name: Generate static pages run: pelican content -o output -s publishconf.py
المعلمات التي تم تمريرها إلى المولد هي المسؤولة عن الدليل حيث سيتم إرسال الملفات التي تم إنشاؤها ( -o output
) وملف التكوين الذي نستخدمه لإنشاء ( -s publishconf.py
؛ يمكنك أن تقرأ عن طريقة مشاركة التكوين المحلي -s publishconf.py
للنشر في وثائق Pelican ) .
اسمحوا لي أن أذكركم بأن مستودع الموقع تم استنساخه بالفعل في output
المجلد.
6) تكوين بوابة وفهرسة ملفاتنا المعدلة:
- name: Set git config and add changes run: | git config --global user.email "${GITHUB_ACTOR}@https://users.noreply.github.com/" git config --global user.name "${GITHUB_ACTOR}" git add --all working-directory: ./output
تستخدم هذه الفقرة المتغير المعروف بالفعل ، وتشير إلى دليل العمل الذي سيتم فيه تشغيل أوامر هذه الخطوة. الأمر للذهاب إلى دليل العمل سيبدو على خلاف ذلك - cd output
.
7) قم بإنشاء رسالة التزام ، وارتكب التغييرات وادفعها إلى المستودع. لضمان عدم إهدار الالتزام ، وبالتالي لا ينتج عنه خطأ في bash (الإخراج ليس 0
) ، نحن نتحقق أولاً مما إذا كان من الضروري الالتزام ودفع شيء على الإطلاق. للقيام بذلك ، نستخدم الأمر git diff-index --quiet --cached HEAD --
والذي سينتج 0
إذا لم تكن هناك تغييرات بالنسبة للإصدار السابق من الموقع ، وهناك 1
مثل هذه التغييرات. ثم نعالج نتيجة هذا الأمر. وبالتالي ، سوف نكتب معلومات مفيدة حول حالة الموقع في هذه المرحلة في المعلومات حول تنفيذ البرنامج النصي ، بدلاً من تعطل التقرير وإرساله إلينا تلقائيًا عن تعطل البرنامج النصي.
كما نقوم بتنفيذ هذه الإجراءات في الدليل الخاص بنا مع صفحات جاهزة.
- name: Push and send notification run: | COMMIT_MESSAGE="Update pages on $(date +'%Y-%m-%d %H:%M:%S')" git diff-index --quiet --cached HEAD -- && echo "No changes!" && exit 0 || echo $COMMIT_MESSAGE # Only if repo have changes git commit -m "${COMMIT_MESSAGE}" git push https://${{ secrets.ACCESS_TOKEN }}@github.com/${GITHUB_ACTOR}/${GITHUB_ACTOR}.imtqy.com.git master working-directory: ./output
يؤدي
نتيجة لذلك ، يسمح لك هذا البرنامج النصي بعدم التفكير في إنشاء صفحات ثابتة. عن طريق إضافة تغييرات مباشرة إلى مستودع التخزين الخاص ، سواء أكنت تعمل مع git من أي نظام أو إنشاء ملف من خلال واجهة الويب الخاصة بـ GitHub ، فإن Actions سوف تفعل كل شيء بنفسها. في حالة حدوث انخفاض غير متوقع في البرنامج النصي ، سيتم إرسال إشعار إلى البريد.
كود كاملسأترك إصدار العمل الخاص بي ، فقد أضاف الإخطار بأن الالتزام قد تم إطلاقه في المستودع الرئيسي في الخطوة الأخيرة.
يتم استخدام الأسرار الموضحة أعلاه حيث تتم إضافة الرمز المميز للبوت ومعرف المستخدم الذي سيتم إرسال الرسالة إليه.
name: Push content to the user's GitHub pages repository on: push jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Set up Python uses: actions/setup-python@v1 with: python-version: 3.7 - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt - name: Make output folder run: mkdir output - name: Clone master branch run: git clone "https://${{ secrets.ACCESS_TOKEN }}@github.com/${GITHUB_ACTOR}/${GITHUB_ACTOR}.imtqy.com.git" --branch master --single-branch ./output - name: Generate static pages run: pelican content -o output -s publishconf.py - name: Set git config and add changes run: | git config --global user.email "${GITHUB_ACTOR}@https://users.noreply.github.com/" git config --global user.name "${GITHUB_ACTOR}" git add --all working-directory: ./output - name: Push and send notification run: | COMMIT_MESSAGE="Update pages on $(date +'%Y-%m-%d %H:%M:%S')" git diff-index --quiet --cached HEAD -- && echo "No changes!" && exit 0 || echo $COMMIT_MESSAGE git commit -m "${COMMIT_MESSAGE}" git push https://${{ secrets.ACCESS_TOKEN }}@github.com/${GITHUB_ACTOR}/${GITHUB_ACTOR}.imtqy.com.git master curl "https://api.telegram.org/bot${{ secrets.BOT_TOKEN }}/sendMessage?text=$COMMIT_MESSAGE %0ALook at ${GITHUB_ACTOR}.imtqy.com %0ARepository%3A github.com/${GITHUB_ACTOR}/${GITHUB_ACTOR}.imtqy.com&chat_id=${{ secrets.ADMIN_ID }}" working-directory: ./output
لقطات
نتيجة أحد عمليات الإطلاق المعروضة في علامة تبويب "الإجراءات" في المستودع مع المصادر

رسالة من الروبوت حول الانتهاء من البرنامج النصي
روابط مفيدة
نظرة عامة على الإجراءات
الإجراءات بناء الجملة
قائمة الزناد
المتغيرات من البيئات الافتراضية
صفحات جيثب
قائمة مولد ثابت