Introdução ao CI/CD para Projetos PHP com GitHub Actions
O desenvolvimento moderno de aplicações PHP é impossível sem automação. Testes manuais e deploy não são apenas demorados, mas também propensos a erros. CI/CD (Continuous Integration / Continuous Deployment) resolve esses problemas automatizando a verificação do código e sua entrega ao servidor. Uma das ferramentas mais populares para isso é o GitHub Actions.
GitHub Actions é uma plataforma integrada para automatizar workflows, que permite executar testes, linters, builds e deploy diretamente do seu repositório no GitHub. Neste artigo, vamos abordar como configurar um pipeline completo de CI/CD para um projeto PHP: desde a execução simples de testes até o deploy automático em um servidor de produção.
Usaremos um exemplo baseado em Laravel, mas todos os princípios se aplicam a qualquer framework PHP (Symfony, Yii, WordPress, etc.). Você aprenderá a escrever configurações YAML, usar matrizes de teste, armazenar dependências em cache e fazer deploy de código com segurança.
Parte Principal
1. Fundamentos do GitHub Actions: estrutura do workflow
Workflow é um processo automatizado que é acionado por um evento específico (push, pull request, criação de tag). Cada workflow é descrito em um arquivo YAML, armazenado no diretório .github/workflows/ do seu repositório.
Estrutura básica do arquivo .github/workflows/ci.yml:
name: CI Pipeline
on: push: branches: [ main, develop ] pull_request: branches: [ main ]
jobs: test: runs-on: ubuntu-latest
steps: - name: Checkout repository uses: actions/checkout@v4
- name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.2' extensions: mbstring, xml, bcmath, pdo_mysql coverage: xdebug
- name: Install dependencies run: composer install --no-progress --prefer-dist
- name: Run PHPUnit tests run: vendor/bin/phpunit --coverage-textVamos analisar os elementos-chave:
on— gatilhos: push em main/develop, pull request em main.jobs— conjunto de tarefas (jobs) executadas em paralelo ou sequencialmente.runs-on— sistema operacional para execução (geralmenteubuntu-latest).steps— sequência de etapas dentro de um job.uses— actions prontas do marketplace (por exemplo,shivammathur/setup-php).run— execução de um comando shell.
2. Configuração Avançada: matriz de teste e cache
Para projetos grandes, é útil testar várias versões do PHP e dependências simultaneamente. Isso é feito através de uma matrix strategy. Também é importante armazenar em cache a pasta vendor do Composer para acelerar a execução do workflow.
Exemplo com matriz e cache:
name: Advanced CI
on: [push, pull_request]
jobs: test: runs-on: ubuntu-latest strategy: matrix: php: [ '8.1', '8.2', '8.3' ] dependency-stability: [ prefer-stable, prefer-lowest ]
steps: - uses: actions/checkout@v4
- name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php }} extensions: mbstring, pdo, gd coverage: none
- name: Cache Composer packages uses: actions/cache@v3 with: path: vendor key: ${{ runner.os }}-php-${{ matrix.php }}-composer-${{ hashFiles('**/composer.lock') }} restore-keys: | ${{ runner.os }}-php-${{ matrix.php }}-composer-
- name: Install dependencies run: composer install --${{ matrix.dependency-stability }} --no-interaction
- name: Run test