راه‌اندازی CI/CD با GitHub Actions برای پروژه‌های PHP

در دنیای توسعه نرم‌افزار، خودکارسازی فرآیندهای توسعه و استقرار یکی از مهم‌ترین اصول برای افزایش بهره‌وری و کاهش خطاهای انسانی است. ابزار GitHub Actions یکی از بهترین انتخاب‌ها برای پیاده‌سازی Continuous Integration (CI) و Continuous Deployment (CD) در پروژه‌های PHP محسوب می‌شود. در این مقاله، مراحل دقیق تنظیم GitHub Actions برای یک پروژه PHP را بررسی خواهیم کرد.

چرا CI/CD مهم است؟

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

شروع به کار با GitHub Actions

GitHub Actions یک ابزار قدرتمند است که امکان تعریف گردش کار (workflow) های خودکار را فراهم می‌کند. شما می‌توانید با فایل‌های YAML، مراحل مختلف تست، بیلد و دیپلوی کدهای خود را تعریف کنید.

مرحله ۱: ایجاد فایل Workflow

برای شروع، وارد مخزن پروژه PHP خود در GitHub شوید و مسیر زیر را دنبال کنید:

  • پوشه .github/workflows را ایجاد کنید.
  • یک فایل جدید با نام ci-cd.yml داخل این پوشه بسازید.

مرحله ۲: تنظیم اولیه فایل YAML

نمونه‌ای از فایل ci-cd.yml:

name: CI/CD for PHP Project
on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
      - name: Set up PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.1'
      - name: Install dependencies
        run: composer install --no-dev --prefer-dist
      - name: Run tests
        run: vendor/bin/phpunit --configuration phpunit.xml

مرحله ۳: توضیح بخش‌ها

  • on: مشخص می‌کند که این گردش کار چه زمانی اجرا شود (مثلاً هنگام push یا باز کردن یک pull request)
  • jobs: مجموعه‌ای از وظایف که باید انجام شوند.
  • steps:: مراحل اجرای هر وظیفه؛ از چک‌اوت کردن کد گرفته تا اجرای تست‌ها.

مرحله ۴: افزودن مرحله Deployment (اختیاری)

If you want to deploy automatically after tests pass, you can add a deployment step to a server or cloud platform like Heroku, AWS, or DigitalOcean: