راه‌اندازی CI/CD با GitHub Actions

با GitHub Actions تست، بیلد و استقرار پروژه را خودکار کنید؛ از مفاهیم Workflow و Job تا استقرار امن روی سرور با SSH و مدیریت Secrets.

راه‌اندازی CI/CD با GitHub Actions
زمان انتشار:
۱۹ مرداد ۱۴۰۵
زمان مطالعه:
حدود 3 دقیقه
نویسنده:
علیرضا مهدی زاده
دسته‌بندی:دواپس

CI/CD چیست و چرا به آن نیاز داریم؟

تصور کنید هر بار که کدی را به مخزن پوش می‌کنید، به‌صورت خودکار تست‌ها اجرا شوند، کد از نظر استاندارد بررسی شود، پروژه بیلد شود و اگر همه‌چیز سالم بود، نسخه‌ی جدید روی سرور قرار بگیرد. این دقیقاً همان چیزی است که CI/CD یا «یکپارچه‌سازی و استقرار مداوم» به ما می‌دهد.

GitHub Actions ساده‌ترین راه برای شروع است؛ چون مستقیماً داخل همان مخزن GitHub شما کار می‌کند و برای مخازن عمومی رایگان است.

ریل‌های موازی قطار میان دیوارهای بتنی؛ یک پایپ‌لاین مشخص از کد تا سرور

مفاهیم اصلی GitHub Actions

  • Workflow: یک فایل YAML در مسیر .github/workflows که کل فرایند را تعریف می‌کند.
  • Event: رویدادی که Workflow را اجرا می‌کند؛ مثل push، pull_request یا زمان‌بندی.
  • Job: مجموعه‌ای از مراحل که روی یک ماشین مجازی اجرا می‌شوند. Jobها می‌توانند موازی یا وابسته به هم باشند.
  • Step: هر دستور یا Action آماده که داخل یک Job اجرا می‌شود.

قدم اول: یکپارچه‌سازی مداوم (CI)

این Workflow روی هر Pull Request اجرا می‌شود و اجازه نمی‌دهد کد خراب وارد شاخه‌ی اصلی شود:

name: CI
on:
  pull_request:
  push:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: npm
      - run: npm ci
      - run: npm run lint
      - run: npm test
      - run: npm run build

گزینه‌ی cache: npm پوشه‌ی کش را بین اجراها نگه می‌دارد و زمان نصب وابستگی‌ها را به‌شدت کاهش می‌دهد.

پل ریلی میان تپه‌های سرسبز؛ مرحله‌ی گذر کد از تست به استقرار

قدم دوم: استقرار مداوم (CD)

بعد از موفقیت تست‌ها، نوبت استقرار است. یکی از ساده‌ترین روش‌ها، اتصال SSH به سرور و اجرای اسکریپت استقرار است:

  deploy:
    needs: test
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - name: Deploy over SSH
        uses: appleboy/ssh-action@v1
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.SERVER_USER }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          script: |
            cd ~/my-site
            ./deploy.sh

عبارت needs: test تضمین می‌کند که استقرار فقط بعد از موفقیت تست‌ها انجام شود و شرط if جلوی استقرار از شاخه‌های دیگر را می‌گیرد.

مدیریت امن اطلاعات حساس

هرگز رمز عبور، کلید SSH یا توکن API را مستقیماً داخل فایل YAML ننویسید. این مقادیر را از مسیر Settings → Secrets and variables → Actions در مخزن تعریف کنید. GitHub آن‌ها را رمزنگاری می‌کند و در لاگ‌ها هم به‌صورت ستاره نمایش می‌دهد.

ایستگاه قطار در شب با ریل‌های متعدد؛ مدیریت چند محیط staging و production

چند تجربه‌ی کاربردی

  • Workflowها را کوچک نگه دارید: لینت، تست و بیلد را در Jobهای جدا اجرا کنید تا خطا سریع‌تر پیدا شود.
  • از Matrix استفاده کنید: با strategy.matrix کد را هم‌زمان روی چند نسخه‌ی Node.js تست کنید.
  • محیط‌ها را جدا کنید: با قابلیت Environments برای استقرار روی production تأیید دستی بگذارید.
  • نسخه‌ی Actionها را قفل کنید: به‌جای شاخه، از نسخه‌ی مشخص مثل @v4 استفاده کنید.
  • اعلان بگیرید: نتیجه‌ی استقرار را به تلگرام یا ایمیل تیم ارسال کنید.

وسایل شخصی مرتب‌شده روی میز؛ هر ابزار در جای مشخص خودش، مثل مراحل یک Workflow

نتیجه‌ای که به دست می‌آید

پس از راه‌اندازی CI/CD، دیگر نگران فراموش کردن اجرای تست‌ها یا اشتباه در مراحل دستی استقرار نیستید. هر تغییر کوچک به‌سرعت و با اطمینان به دست کاربر می‌رسد و تیم می‌تواند به‌جای کارهای تکراری، روی ساخت قابلیت‌های جدید تمرکز کند.

گروهی از دوستان در حال پریدن و جشن گرفتن کنار آب در غروب؛ حس خوب اولین استقرار خودکار موفق

جمع‌بندی

GitHub Actions ورود به دنیای CI/CD را برای هر توسعه‌دهنده‌ای ساده کرده است. با همین دو Job ساده، کیفیت کد تضمین می‌شود و استقرار از یک کار استرس‌زا به یک اتفاق روزمره و بی‌دردسر تبدیل می‌شود. از یک Workflow کوچک شروع کنید و کم‌کم آن را متناسب با نیاز پروژه گسترش دهید.

دیدگاه‌ها

برای ثبت دیدگاه باید شماره موبایل خود را تأیید کنید.

هنوز دیدگاهی ثبت نشده است. اولین نفر باشید!