على الرغم من أن الإعداد الحالي يعمل بشكل لا تشوبه شائبة – وهو مجاني، إلا أنني أردت تجربة المتسابقين الذين تتم استضافتهم ذاتيًا. وهنا النتائج التي توصلت إليها.
سياق
يقدم GitHub استخدامًا مجانيًا كبيرًا لإجراءات GitHub:
يعد استخدام GitHub Actions مجانيًا للعدائين القياسيين المستضافين على GitHub في المستودعات العامة، وللعدائين المستضافين ذاتيًا. بالنسبة للمستودعات الخاصة، يتلقى كل حساب على GitHub قدرًا معينًا من الدقائق المجانية والتخزين للاستخدام مع برامج التشغيل المستضافة على GitHub، اعتمادًا على خطة الحساب. يتم التحكم في أي استخدام يتجاوز المبالغ المضمنة من خلال حدود الإنفاق.
ومع ذلك، فإن هذه السياسة يمكن أن تتغير بسهولة غداً. تُظهر سياسات الطبقة المجانية اتجاهًا منتظمًا للتقليص عندما:
- نسبة كبيرة بما فيه الكفاية من المستخدمين يستخدمون المنتج، اربط
- يريد المساهمون المزيد من الإيرادات
- مدير مالي جديد يقرر خفض التكاليف
- الاقتصاد العالمي ينكمش
- مزيج من أعلاه
تم التحذير منه. أحب تجربة الخيارات قبل أن أحتاج إلى اختيار واحد. مثال على ذلك: ماذا لو كنت بحاجة إلى الهجرة؟
النظرية
تشتمل إجراءات GitHub على مكونين:
- البنية التحتية لإجراءات GitHub نفسها. أنها تستضيف جدولة الوظائف.
- العدائين، الذين يقومون بإدارة الوظائف
افتراضيًا، يتم تشغيل المهام على مشغلات GitHub. ومع ذلك، من الممكن تكوين مهمة شخص ما لتعمل على برامج تشغيل أخرى، سواء داخل الشركة أو في السحابة: تسمى هذه البرامج العدائين المستضافين ذاتيا.
ال توثيق فيما يتعلق بكيفية إنشاء متسابقين مستضافين ذاتيًا، يوفر كل المعلومات اللازمة لإنشاء واحد، لذلك لن أقوم بإعادة صياغته.
لقد لاحظت مشكلتين غير تافهتين. أولاً، إذا كانت لديك وظائف في مستودعات مختلفة، فيمكنك يحتاج لإعداد وظيفة لكل مستودع. مجموعات التشغيل متاحة فقط لمستودعات المؤسسة. نظرًا لأن معظم عمليات إعادة الشراء الخاصة بي تعتمد على حسابي العادي، فلا يمكنني استخدام المجموعات. وبالتالي، يجب عليك تكرار حزمة كل مستودع على Pi الخاص بالعداء.
بالإضافة إلى ذلك، لا توجد حزمة مخصصة: يجب عليك فك ضغط الأرشيف. هذا يعني أنه لا توجد طريقة لترقية إصدار التشغيل بسهولة.
ومع ذلك، توقعت أن تكون الهجرة سطرًا واحدًا:
jobs: update: #runs-on: ubuntu-latest runs-on: self-hosted
ومع ذلك، فهي أكثر انخراطًا بعض الشيء. دعنا نوضح بالتفصيل الخطوات التي كان عليّ اتخاذها في الريبو الخاص بي لإنجاز المهمة.
الممارسة
تعتمد إجراءات GitHub على تثبيت Docker على المشغل. ولهذا السبب، اعتقدت أن الوظائف تعمل في صورة مخصصة: وهذا خطأ واضح. كل ما تكتبه في وظيفتك يحدث على نظام التشغيل. مثال على ذلك، قام البرنامج النصي الأولي بتثبيت Python وPoetry.
jobs: update: runs-on: ubuntu-latest steps: - name: Set up Python 3.x uses: actions/setup-python@v5 with: python-version: 3.12 - name: Set up Poetry uses: abatilo/actions-poetry@v2 with: poetry-version: 1.7.1
في سياق الحاوية المؤقتة التي يتم إنشاؤها أثناء كل عملية تشغيل، يكون الأمر منطقيًا؛ وفي سياق نظام مستقر طويل الأمد، لا يحدث ذلك.
Raspbian، نظام التشغيل الافتراضي Raspberry، مثبت عليه بالفعل Python 3.11. ومن ثم، اضطررت إلى تقليل الإصدار الذي تم تكوينه في الشعر. إنها ليست مشكلة كبيرة لأنني لا أستخدم أي ميزة محددة في Python 3.12.
pyproject.toml
[tool.poetry.dependencies]python = "^3.11"
يحظر Raspbian تثبيت أي تبعية لـ Python في البيئة الأساسية، وهو أمر افتراضي معقول جدًا. لتثبيت Poetry، استخدمت مدير حزم APT العادي:
sudo apt-get install python-poetry
وكان التالي هو التعامل مع الأسرار. على GitHub، يمكنك تعيين الأسرار على واجهة المستخدم الرسومية والإشارة إليها في البرامج النصية الخاصة بك عبر متغيرات البيئة:
jobs: update: runs-on: ubuntu-latest steps: - name: Update README run: poetry run python src/main.py --live env: BLOG_REPO_TOKEN: $ YOUTUBE_API_KEY: $
فهو يسمح بفصل الخطوات الفردية بحيث تتمكن الخطوة من الوصول إلى المتغيرات البيئية التي تحتاجها فقط. بالنسبة للعدائين الذين تتم استضافتهم ذاتيًا، يمكنك تعيين متغيرات البيئة في ملف .env
الملف داخل المجلد.
jobs: update: runs-on: ubuntu-latest steps: - name: Update README run: poetry run python src/main.py --live
إذا كنت تريد إعدادات أكثر أمانًا، فأنت وحدك.
وأخيرا، فإن الهندسة المعمارية هي نموذج قائم على السحب. يتحقق العداء باستمرار من جدولة المهمة. لجعل المشغل خدمة، نحتاج إلى استخدام نصوص برمجية جاهزة داخل مجلد المشغل:
sudo ./svc.sh installsudo ./svc.sh start
يستخدم البرنامج النصي systemd
تحته.
خاتمة
لا يعد الترحيل من عداء GitHub إلى عداء مستضاف ذاتيًا أمرًا كبيرًا ولكنه يتطلب تغيير بعض الأجزاء والأجزاء. الأهم من ذلك، أنك تحتاج إلى فهم البرنامج النصي الذي يعمل على الجهاز. هذا يعني أنك بحاجة إلى أتمتة عملية توفير الجهاز الجديد في حالة حدوث أعطال. أنا أفكر في فوائد تشغيل العداء داخل حاوية على Pi للعودة إلى خطواتي السابقة. سأكون سعيدًا لمعرفة ما إذا كنت قد وجدت مثل هذا الحل واستخدمته. على أية حال، لن أقوم بترحيل المزيد من الوظائف إلى الاستضافة الذاتية في الوقت الحالي.