CI/CD para projetos PHP: GitHub Actions – guia completo

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

CI/CD para projetos PHP: GitHub Actions



O desenvolvimento web moderno é impensável sem automação. Executar testes manualmente, verificar o estilo do código e fazer deploy no servidor consomem tempo e são propensos a erros. A solução é CI/CD (Continuous Integration / Continuous Deployment). Neste artigo, vamos analisar como configurar um pipeline completo para projetos PHP usando GitHub Actions. Você aprenderá como testar código automaticamente, verificar sua qualidade e implantar no servidor de produção a cada push no repositório.



O que é CI/CD e por que um desenvolvedor PHP precisa disso?

Continuous Integration (CI) é a prática onde cada commit é verificado automaticamente: testes unitários, linters, verificações de segurança são executados. Continuous Deployment (CD) é o próximo passo, onde o código que passou com sucesso pelo CI é automaticamente implantado no servidor (staging ou production).

Para PHP isso é especialmente relevante: a linguagem é dinâmica, erros de tipagem e sintaxe frequentemente são descobertos apenas em tempo de execução. O GitHub Actions permite configurar um pipeline que:

  • Executa testes PHPUnit em diferentes versões do PHP (7.4, 8.0, 8.1, 8.2).
  • Verifica o código com PHP_CodeSniffer ou PHPStan.
  • Realiza deploy no servidor via SSH ou Docker.


Criando um workflow no GitHub Actions

Para começar, crie no diretório raiz do seu projeto PHP a pasta .github/workflows. Dentro dela, crie um arquivo, por exemplo ci.yml. Este será o seu pipeline.

Vamos considerar um exemplo básico para CI. Ele será executado a cada push no branch main ou ao criar um Pull Request.



name: PHP CI

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

jobs: build: runs-on: ubuntu-latest

strategy: matrix: php-versions: ['7.4', '8.0', '8.1', '8.2']

steps: - uses: actions/checkout@v3

- name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php-versions }} tools: composer, phpunit

- name: Validate composer.json and composer.lock run: composer validate --strict

- name: Cache Composer packages id: composer-cache 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 --prefer-dist --no-progress

- name: Run PHPUnit tests run: phpunit --configuration phpunit.xml


Análise dos pontos-chave:

  • Matrix strategy — permite executar testes em várias versões do PHP simultaneamente. Isso garante a compatibilidade do código.
  • shivammathur/setup-php — action popular para configurar o ambiente PHP. Ele instala a versão necessária, Composer e PHPUnit.
  • Cache do vendor — acelera execuções subsequentes, evitando baixar as dependências novamente.
  • composer validate — verifica a correção do composer.json.


Adicionando análise estática e linting

Testes são bons, mas não podemos prescindir do controle de qualidade do código. Vamos adicionar ao mesmo workflow (ou criar um job separado) a verificação com PHPStan e PHP_CodeSniffer.



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

- name: Run PHP_CodeSniffer run: vendor/bin/phpcs --standard=PSR2 src tests


Esses passos podem ser adicionados após a instalação das dependências. O PHPStan com nível max encontrará potenciais erros de tipo, e o PHP_CodeSniffer com o padrão PSR-2 (ou PSR-12) garantirá um estilo de código uniforme. Se pelo menos um passo falhar,

Blogs

Book Recommendations