CI/CD para projetos PHP: configurando GitHub Actions do zero

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course
```html

CI/CD para projetos PHP: configurando GitHub Actions



O desenvolvimento moderno em PHP é impensável sem a automação dos processos de teste, compilação e implantação. CI/CD (Continuous Integration / Continuous Deployment) permite que as equipes lancem atualizações mais rapidamente, reduzam o número de erros e mantenham a alta qualidade do código. Neste artigo, vamos detalhar como configurar pipelines de CI/CD para projetos PHP usando GitHub Actions — a ferramenta de automação integrada do GitHub.



Abordaremos exemplos reais para frameworks populares (Laravel, Symfony), aprenderemos a executar testes, verificar o estilo do código, coletar artefatos e fazer deploy automático no servidor. O artigo será útil tanto para iniciantes quanto para desenvolvedores experientes que desejam otimizar seu workflow.



1. Fundamentos do GitHub Actions para PHP



GitHub Actions é uma plataforma para automatizar fluxos de trabalho diretamente no repositório. O workflow é descrito em arquivos YAML, que são armazenados no diretório .github/workflows/. Cada workflow consiste em uma ou mais jobs, que são executadas em máquinas virtuais (runner) quando determinados eventos ocorrem (push, pull request, release, etc.).



Para projetos PHP, as etapas principais geralmente incluem:



  • Instalação de dependências via Composer
  • Configuração do ambiente (versão do PHP, extensões, banco de dados)
  • Execução de análise estática (PHPStan, Psalm)
  • Execução de testes unitários (PHPUnit, Pest)
  • Verificação de estilo de código (PHP CS Fixer, Laravel Pint)
  • Compilação e publicação de imagem Docker
  • Deploy no servidor de produção/staging


Um workflow mínimo para um projeto PHP se parece com isso:



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 é executado a cada push ou criação de pull request na branch main. Ele verifica o código quanto à conformidade com os padrões e executa os testes.



2. Configuração avançada: testes, linting e análise estática



Um projeto real requer uma verificação mais profunda da qualidade do código. Vamos considerar um exemplo para o framework Laravel com um conjunto completo de ferramentas.



Criaremos o arquivo .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