CI/CD para projetos PHP: GitHub Actions do A ao Z

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

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-text


Vamos 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 (geralmente ubuntu-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

Blogs

Book Recommendations