رفتن به محتوای اصلی
iServer24 | ارائه‌کننده سرورهای ابری و اختصاصی
آموزش کامل CI/CD با GitHub Actions: از کد تا استقرار خودکار

آموزش کامل CI/CD با GitHub Actions: از کد تا استقرار خودکار

DevOps و اتوماسیون
3 دقیقه مطالعه

آشنایی با مفهوم CI/CD و پیاده‌سازی یک پایپ‌لاین کامل با GitHub Actions برای تست خودکار، ساخت Docker Image و استقرار خودکار روی سرور.

آموزش کامل CI/CD با GitHub Actions: از کد تا استقرار خودکار

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

CI/CD چیست؟

CI (Continuous Integration) یعنی با هر تغییر در کد، به‌صورت خودکار تست‌ها اجرا و کیفیت کد بررسی شود. CD (Continuous Deployment/Delivery) یک قدم جلوتر می‌رود و در صورت موفقیت تست‌ها، نسخهٔ جدید را به‌صورت خودکار روی سرور مستقر می‌کند.

اجزای اصلی GitHub Actions

مفهومتوضیح
Workflowیک فایل YAML که کل فرآیند خودکار را تعریف می‌کند
Jobمجموعه‌ای از مراحل که روی یک Runner اجرا می‌شوند
Stepیک دستور یا Action مشخص درون یک Job
Runnerماشینی (مجازی یا خودمیزبان) که Job روی آن اجرا می‌شود

نوشتن اولین Workflow

فایل‌های Workflow در مسیر .github/workflows/ پروژه قرار می‌گیرند. نمونه‌ای ساده برای اجرای تست‌ها با هر Push:

15 خط
name: CI
on:
  push:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
      - run: npm install
      - run: npm test
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

ساخت و انتشار Docker Image

اگر برنامهٔ خود را طبق Docker کانتینری کرده‌اید، می‌توانید مرحله‌ای برای Build و Push خودکار Image اضافه کنید:

11 خط
  build-and-push:
    needs: test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Login to Docker Hub
        run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
      - name: Build and Push
        run: |
          docker build -t myapp:latest .
          docker push myapp:latest
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

استقرار خودکار روی سرور

مرحلهٔ آخر معمولاً اتصال به سرور تولید و به‌روزرسانی سرویس در حال اجراست. برای پروژه‌هایی که روی Kubernetes اجرا می‌شوند، این مرحله می‌تواند دستور kubectl set image باشد؛ اگر با مفاهیم پایهٔ آن آشنا نیستید، مقالهٔ معرفی Kubernetes نقطهٔ شروع خوبی است. برای استقرار روی یک سرور ساده هم می‌توان از یک Step با SSH استفاده کرد:

12 خط
  deploy:
    needs: build-and-push
    runs-on: ubuntu-latest
    steps:
      - uses: appleboy/ssh-action@v1
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.SERVER_USER }}
          key: ${{ secrets.SERVER_SSH_KEY }}
          script: |
            docker pull myapp:latest
            docker compose up -d
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

مدیریت Secrets

هیچ‌وقت رمز عبور، کلید SSH یا توکن را مستقیم در فایل Workflow ننویسید. تمام این مقادیر باید در بخش Settings > Secrets and variables > Actions مخزن گیت‌هاب ذخیره و از طریق ${{ secrets.NAME }} در Workflow استفاده شوند.

جمع‌بندی

GitHub Actions با تعریف Workflowهای ساده در قالب YAML، کل مسیر از تست تا استقرار را خودکار می‌کند و ریسک خطای انسانی در دیپلوی دستی را از بین می‌برد. شروع با یک Workflow ساده برای تست، و افزودن تدریجی مراحل Build و Deploy، بهترین مسیر یادگیری این ابزار است.

ترکیب CI/CD با اتوماسیون پیکربندی

در بسیاری از پایپ‌لاین‌های CI/CD، پس از استقرار کد، نیاز به پیکربندی خودکار سرورهای هدف نیز وجود دارد. ابزارهایی مانند Ansible می‌توانند این مرحله را بدون نیاز به Agent روی سرورها انجام دهند؛ جزئیات کامل در مقاله Ansible: اتوماسیون نصب و پیکربندی سرورها آمده است.

زیرساخت ابری برای اجرای همین آموزش

سرور ابری ساعتی را برای Docker، Ubuntu و DevOps راه‌اندازی کنید — پرداخت به میزان مصرف یا ماهانه.

ادامه یادگیری:Docker·Ubuntu·VPS