تعلم GitHub Actions خطوة بخطوة

تعلم GitHub Actions خطوة بخطوة

M. Zakyuddin Munziri

M. Zakyuddin Munziri

@zakiego

كتب أصلاً بـ Bahasa Indonesia.

الخلفية

هناك العديد من الأشياء التي يمكنك القيام بها مع GitHub Actions. من بينها، يمكنني تشغيل سكريبت لجمع البيانات من موقع KPU (لجنة الانتخابات الإندونيسية)، كل يوم، تلقائياً، دون الحاجة إلى تشغيله يدوياً (zakiego/data-pemilu-2024). شيء آخر يمكنك القيام به هو نشر موقع ويب في كل مرة يتم فيها دفع الكود إلى المستودع (cloudflare/pages-action).

المتطلبات الأساسية

الافتراض لقراء هذا المقال هو أنهم يفهمون بالفعل git، لإنشاء مستودع والدفع إلى مستودع. سيكون من المفيد جداً أيضاً إذا كنت تستخدم الطرفية بشكل متكرر.

المقدمة

ببساطة شديدة، GitHub Actions هو خادم مملوك لـ GitHub يمكننا استعارته لتشغيل الكود. يمكننا تشغيل الكود في أي وقت، على سبيل المثال، نريد تشغيله مرة كل ساعة. أو يمكننا أيضاً تشغيله في كل مرة يكون هناك دفع إلى مستودع GitHub.

بمعنى أكثر تعقيداً، GitHub Actions هو منصة لتشغيل التكامل المستمر والتسليم المستمر (CI/CD) لأتمتة عملية البناء والاختبار والنشر.

الهيكل

أولاً، نحتاج إلى إعداد مجلد مشروع محلياً، على سبيل المثال، لنسميه belajar-github-action. لإنشاء سكريبت GitHub Actions، نحتاج إلى وضعه داخل المجلد /belajar-github-action/.github/workflows/{ضعه هنا}.

لنقم بإنشاء ملف يسمى run.yml، هذا الملف له تنسيق yml. يمكننا تسمية الملف بأي اسم بحرية، ويمكننا حتى إنشاء عدة ملفات GitHub Actions في مستودع واحد.

├── README.md
├── .github
│   └── workflows
│       └── run.yml

هناك 3 مكونات مهمة في ملف GitHub Actions:

  1. ما هو اسم سير العمل؟
  2. متى يجب تشغيل سير العمل؟
  3. ما الأشياء التي يجب تشغيلها؟

يتم بعد ذلك توضيح هذه الأسئلة في ملف GitHub Actions بسيط كما يلي:

name: Belajar Github Action

on: push

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - run: echo "Hello, world!"
      - run: echo "This is my first Github Action"
      - run: echo "I'm learning how to use Github Action"

يمكن رؤية كيفية تشغيل الإجراء في zakiego/belajar-github-action/actions.

يمكن رؤية الكود المصدري للإجراء في zakiego/belajar-github-action/.github/workflows/run.yml

اسم سير العمل هذا هو "Belajar Github Action".

متى سيتم تشغيل سير العمل هذا؟ عندما يكون هناك "push". ببساطة، هذا يعني عندما يتم دفع الكود إلى المستودع، سيتم تشغيل سير العمل هذا.

jobs هي مجموعة من الوظائف التي نقوم بإنشائها. في مجموعة واحدة، يمكننا إنشاء عدة وظائف فرعية، لكن في هذا المثال، نقوم بإنشاء وظيفة فرعية واحدة فقط، وهي 'build'.

داخل build يوجد runs-on و steps.

runs-on هو الجهاز المستخدم لتشغيل سير العمل، يوفر GitHub نظام Ubuntu Linux و Microsoft Windows و macOS. بالإضافة إلى ذلك، يمكننا أيضاً تشغيل GitHub Actions على خادمنا الخاص باستخدام وضع الاستضافة الذاتية (docs).

أخيراً، steps هي الخطوات أو جوهر السكريبت الذي نريد تشغيله.

على سبيل المثال، إذا أردنا تشغيل سكريبت index.ts باستخدام bun، سيبدو سير العمل هكذا (source):

name: my-workflow
jobs:
  my-job:
    name: my-job
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: oven-sh/setup-bun@v1
      - run: bun install
      - run: bun index.ts
      - run: bun run build

أو مثال آخر، إذا أردنا تشغيل عملية البناء والاختبار لكود Golang، في كل مرة يتم فيها دفع الكود إلى المستودع (source):

name: Go
on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - name: Setup Go
        uses: actions/setup-go@v4
        with:
          go-version: "1.21.x"
      - name: Install dependencies
        run: go get .
      - name: Build
        run: go build -v ./...
      - name: Test with the Go CLI
        run: go test

ملاحظات إضافية

إذا لاحظت، هناك استخدام لـ

  • actions/checkout@v4
  • oven-sh/setup-bun@v1
  • actions/setup-go@v4

ما هي وظائفها؟

باختصار، uses هي عملية نستخدم فيها نوعاً من المكتبات الجاهزة للاستخدام لتبسيط عملية العمل.

oven-sh/setup-bun@v1 يعمل على إعداد bun و actions/setup-go@v4 يعمل على إعداد Golang تلقائياً، لذلك لا نحتاج إلى القلق بشأن curl أو خطوات طويلة لتثبيتها.

في هذه الأثناء، actions/checkout@v4 مثير للاهتمام.

على سبيل المثال، إذا كان لدينا ملف index.ts في المستودع. إذا أردنا تشغيل هذا الكود، نحتاج إلى عمل checkout باستخدام actions/checkout@v4، ثم يمكننا تشغيله. إذا لم نستخدم actions/checkout@v4، فإن GitHub Actions لا يملك حق الوصول إلى مستودعنا، مما يعني أنه لا يعرف ما هو ملف index.ts الذي نريد تشغيله.

الخاتمة

لا يزال هناك الكثير لنتعلمه. على سبيل المثال، schedule (#schedule) للتشغيل في فترات زمنية معينة. أو pull_request (#pull_request) للتشغيل في كل مرة يكون هناك طلب سحب. يمكننا حتى تشغيل GitHub Actions عبر API، وهو repository_dispatch (#repository_dispatch).

المراجع


كُتب في الأصل في 14 مارس 2024 في بنجرماسين

اكتمل في 30 مارس 2024 م/19 رمضان 1445 هـ في بيلايهاري، 7:53 صباحاً

تم التحرير في 1 أبريل 2024 في بنجرماسين، 16:22

مقالات أخرى

توقفت عن الحفر في السجلات

توقفت عن الحفر في السجلات

تغير تصحيح الأخطاء (Debugging) عندما توقفت عن قراءة السجلات يدوياً وبدأت في استخدام وكلاء الذكاء الاصطناعي لربط الأخطاء عبر بيانات المراقبة - وصول أسرع للسبب الجذري، وطرق مسدودة أقل.

السرعة لم تكن أبداً الجزء الصعب في CI/CD

السرعة لم تكن أبداً الجزء الصعب في CI/CD

خطوط الأنابيب السريعة لا تزيل الخوف من الشحن. الثقة تأتي من التراجع الآمن، أعلام الميزات، والأنظمة التي تتصرف بشكل يمكن التنبؤ به عندما تسوء الأمور.