CI/CD para proyectos PHP: GitHub Actions nivel avanzado

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

Introducción: del CI/CD básico al nivel de producción



Un pipeline básico de CI/CD que solo ejecuta pruebas está bien. Pero para un proyecto PHP serio, esto no es suficiente. En el desarrollo real se requiere caché de dependencias para acelerar las compilaciones, tareas paralelas, compilaciones matriciales para diferentes versiones de PHP, análisis estático y, por supuesto, despliegue automático. En este artículo, analizaremos técnicas avanzadas de configuración de GitHub Actions para proyectos PHP con ejemplos prácticos.



Asumimos que ya está familiarizado con los conceptos básicos de la sintaxis YAML y la estructura fundamental de .github/workflows. Ahora pasaremos a la optimización y expansión de capacidades.



1. Aceleración de compilaciones: caché de Composer y estrategia óptima



Cada ejecución del workflow descarga las dependencias nuevamente. Esto toma de 1 a 3 minutos, que se pueden reducir a 5-10 segundos usando caché.



Caché inteligente de vendor



Usamos actions/cache con una clave basada en el hash de composer.lock. Si el archivo de bloqueo no ha cambiado, las dependencias se restaurarán desde la caché.



name: PHP CIon: [push, pull_request]

jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4

- name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.2' tools: composer:v2

- name: Cache Composer dependencies uses: actions/cache@v3 with: path: vendor key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }} restore-keys: | ${{ runner.os }}-php-

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


Observe restore-keys: si no se encuentra la clave exacta, se usará la última caché para ese sistema operativo. Esto protege al cambiar de ramas.



Compilación matricial para diferentes versiones de PHP



Para garantizar la compatibilidad, pruebe en varias versiones de PHP en paralelo:



jobs:  test:    strategy:      matrix:        php-version: ['8.1', '8.2', '8.3']        dependency-stability: [prefer-lowest, prefer-stable]

steps: - uses: actions/checkout@v4 - name: Setup PHP ${{ matrix.php-version }} uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php-version }}

- name: Cache uses: actions/cache@v3 with: path: vendor key: ${{ runner.os }}-php${{ matrix.php-version }}-${{ hashFiles('**/composer.lock') }}

- name: Install dependencies run: | composer update --${{ matrix.dependency-stability }} --prefer-dist --no-interaction

- name: Run tests run: vendor/bin/phpunit


Este enfoque detecta problemas de compatibilidad antes de fusionar en la rama principal. Obtendrá 6 trabajos paralelos (3 versiones × 2 estrategias de estabilidad).



2. Etapas avanzadas: análisis estático y calidad del código



Las pruebas unitarias no son la única herramienta de control de calidad. Agreguemos PHPStan (nivel máximo de análisis) y PHP Code Sniffer.



Linting y análisis estático



Cree un trabajo separado para el análisis, que se ejecute en paralelo con las pruebas:



jobs:  static-analysis:    runs-on: ubuntu-latest    steps:      - uses: actions/checkout@v4      - uses: shivammathur/setup-php@v2        with:          php-version: '8.2'          coverage: none

- name: Cache uses: actions/cache@v3 with: path: vendor key: ${{ runner.os }}-php-static-${{ hashFiles('**/composer.lock') }}

- run: composer install --no-interaction --prefer-dist

- name: PHPStan run: vendor/bin/phpstan analyse --level=max src/

- name: PHPCS run: vendor/bin/phpcs --standard=PSR12 src/

Blogs

Book Recommendations