CI/CD para proyectos PHP: configuración de GitHub Actions desde cero

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course
```html

CI/CD para proyectos PHP: configuración de GitHub Actions



El desarrollo moderno en PHP es impensable sin la automatización de los procesos de prueba, compilación e implementación. CI/CD (Continuous Integration / Continuous Deployment) permite a los equipos lanzar actualizaciones más rápido, reducir la cantidad de errores y mantener una alta calidad del código. En este artículo, analizaremos en detalle cómo configurar pipelines de CI/CD para proyectos PHP utilizando GitHub Actions, la herramienta de automatización integrada de GitHub.



Veremos ejemplos reales para frameworks populares (Laravel, Symfony), aprenderemos a ejecutar pruebas, verificar el estilo del código, compilar artefactos e implementar automáticamente en el servidor. El artículo será útil tanto para principiantes como para desarrolladores experimentados que deseen optimizar su workflow.



1. Fundamentos de GitHub Actions para PHP



GitHub Actions es una plataforma para automatizar flujos de trabajo directamente en el repositorio. Un workflow se describe en archivos YAML que se almacenan en el directorio .github/workflows/. Cada workflow consta de uno o varios jobs, que se ejecutan en máquinas virtuales (runner) cuando ocurren eventos específicos (push, pull request, release, etc.).



Para proyectos PHP, los pasos clave suelen incluir:



  • Instalación de dependencias mediante Composer
  • Configuración del entorno (versión de PHP, extensiones, base de datos)
  • Ejecución de análisis estático (PHPStan, Psalm)
  • Ejecución de pruebas unitarias (PHPUnit, Pest)
  • Verificación del estilo del código (PHP CS Fixer, Laravel Pint)
  • Compilación y publicación de la imagen Docker
  • Implementación (deploy) en servidores de producción/staging


Un workflow mínimo para un proyecto PHP se ve así:



name: PHP CI

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

jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.2' extensions: mbstring, intl, pdo_mysql coverage: xdebug - name: Install dependencies run: composer install --prefer-dist --no-progress - name: Run tests run: vendor/bin/phpunit --testdox


Este workflow se ejecuta con cada push o creación de pull request en la rama main. Verifica que el código cumpla con los estándares y ejecuta las pruebas.



2. Configuración avanzada: pruebas, linting y análisis estático



Un proyecto real requiere una verificación más profunda de la calidad del código. Veamos un ejemplo para el framework Laravel con un conjunto completo de herramientas.



Crearemos el archivo .github/workflows/laravel-ci.yml:



name: Laravel CI/CD

on: push: branches: [ main, develop ] pull_request: branches: [ main ]

jobs: quality: runs-on: ubuntu-latest services: mysql: image: mysql:8.0 env: MYSQL_DATABASE: testing MYSQL_USER: user MYSQL_PASSWORD: secret MYSQL_ROOT_PASSWORD: root ports: - 3306:3306 options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3

steps: - uses: actions/checkout@v4

- name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.2' extensions: mbstring, intl, pdo_mysql, bcmath, redis coverage: pcov tools: composer:v2

- name: Copy .env run: | cp .env.example .env php artisan key:generate

- name: Install dependencies run: composer install --no-interaction --prefer-dist

- name: Run Laravel Pint (Code Style) run: vendor/bin/pint --test

- name: Run PHPStan (Static Analysis) run: vendor/bin/phpstan analyse --memory-limit=2G

```

Blogs

Book Recommendations