GitHub Actions do zero: CI/CD para projetos PHP e Node.js
Introdução
O desenvolvimento de software evoluiu ao longo dos anos, trazendo melhorias significativas na produtividade e no alcance das aplicações. Entre essas inovações, destaca-se a integração contínua (CI) e entrega contínua (CD), tecnologias que permitem automação de processos de desenvolvimento, testes e implantação, aumentando a eficiência e reduzindo o risco associado à liberação de novas funcionalidades.
Nesse contexto, GitHub Actions surgiu como uma ferramenta poderosa para implementar CI/CD em projetos. Desenvolvida pela Microsoft, é uma extensão do GitHub, permitindo que os usuários criem fluxos de trabalho personalizados para automatizar tarefas, desde a execução de testes até a implantação na produção.
Este artigo visa guiar você por esse mundo de CI/CD utilizando GitHub Actions. Abordaremos as principais características da ferramenta e como ela pode ser integrada aos projetos PHP e Node.js para implementar processos de automação eficientes. Ao final, você estará capacitado a criar seu próprio pipeline de CI/CD em seus projetos utilizando GitHub Actions.
O que é e por que importa
O conceito de Integração Contínua (CI) e Entrega Contínua (CD) refere-se à automatização dos processos de desenvolvimento, testes e implantação de software, visando melhorar a eficiência e reduzir o risco associado à liberação de novas funcionalidades. A CI/CD envolve várias etapas, como:
- Build: compilação do código-fonte em artefatos executáveis;
- Testes: execução de testes unitários, integração e de aceite para validar a qualidade do software;
- Implantação: desdobramento dos artefatos compilados na produção.
GitHub Actions é uma ferramenta que permite implementar essas etapas de forma automatizada. Ela se integra ao repositório Git no GitHub, permitindo que os usuários criem fluxos de trabalho personalizados para automatizar tarefas e implantação dos projetos. A motivação por trás da utilização da CI/CD é simples: aumentar a produtividade e melhorar a qualidade do software através da automação das etapas repetitivas, reduzindo ao mesmo tempo o risco associado à liberação de novas funcionalidades.
Ao implementar a CI/CD com GitHub Actions nos projetos PHP e Node.js, é possível garantir que as alterações no código sejam verificadas automaticamente antes de serem liberadas para a produção. Isso ajuda a prevenir bugs mais avançados, facilita a identificação dos problemas na fase inicial do desenvolvimento e permite que os times de desenvolvimento trabalhem de forma ágil e eficaz.
Como funciona na prática
GitHub Actions permite que os usuários definam fluxos de trabalho para automatizar as etapas de CI/CD. Aqui estão os passos envolvidos no funcionamento interno do GitHub Actions:
- Trigger: o fluxo de trabalho é ativado quando ocorre um evento específico, como a criação de uma nova branch ou a submissão de alterações.
- Etapas: o fluxo de trabalho é composto por etapas individuais que são executadas sequencialmente. Cada etapa pode ser uma tarefa simples, como execução de comandos no terminal, ou complexa, envolvendo a execução de scripts em linguagens de programação.
- Execução: o GitHub Actions utiliza containers para execução das etapas do fluxo de trabalho. Isso permite que os usuários execute diferentes ambientes e configurações sem afetar a estabilidade da plataforma.
- Dependências: as etapas do fluxo de trabalho podem ter dependências, como requisitos ou bibliotecas necessárias para execução. O GitHub Actions cuida das dependências automaticamente, garantindo que elas sejam baixadas e configuradas corretamente antes de serem utilizadas.
- Logs: o GitHub Actions fornece logs detalhados sobre a execução do fluxo de trabalho. Isso permite aos usuários monitorar os resultados dos testes e identificar problemas rapidamente.
Com essas características, o GitHub Actions proporciona uma experiência robusta para implementação da CI/CD nos projetos PHP e Node.js, facilitando a automação das etapas repetitivas e reduzindo ao mesmo tempo o risco associado à liberação de novas funcionalidades.
Exemplo real
Vamos criar um exemplo real de como configurar o GitHub Actions para projetos PHP e Node.js.
Exemplo 1: CI/CD para projeto PHP
name: Build e Testar Projeto PHP
on:
push:
branches:
- main
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- name: Checkout código
uses: actions/checkout@v2
- name: Instalar dependências
run: |
composer install
- name: Executar testes
run: |
vendor/bin/phpunit --coverage-clover=php://stdout
- name: Build e upload da aplicação
env:
CHOKIDAR_SKIP_VERSION_CHECK: true
run: |
npm install --production
npm run build
cd public
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git config --global user.name "GitHub Actions"
git add .
git commit -m "build da aplicação"
git push origin master
Exemplo 2: CI/CD para projeto Node.js
name: Build e Testar Projeto Node.js
on:
push:
branches:
- main
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- name: Checkout código
uses: actions/checkout@v2
- name: Instalar dependências
run: |
npm install --production
- name: Executar testes
run: |
npm run test
- name: Build e upload da aplicação
env:
CHOKIDAR_SKIP_VERSION_CHECK: true
run: |
npm install --production
npm run build
cd public
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git config --global user.name "GitHub Actions"
git add .
git commit -m "build da aplicação"
git push origin master
Esses exemplos demonstram como criar fluxos de trabalho para projetos PHP e Node.js utilizando GitHub Actions. As etapas incluem a instalação de dependências, execução de testes, build da aplicação e upload para o repositório remoto.
Boas práticas
Instalar dependências corretamente
- Sempre utilize
--productionao executarnpm installpara garantir que as dependências sejam instaladas na configuração de produção. - Para evitar problemas com versões, defina a variável de ambiente
CHOKIDAR_SKIP_VERSION_CHECKcomo verdadeira (true) antes da execução denpm install.
Executar testes adequadamente
- Certifique-se de que os testes estão configurados para serem executados corretamente utilizando o comando
npm run test. - Utilize ferramentas como Jest ou Mocha para escrever e executar testes unitários.
- Considere a utilização de um proxy HTTP para acelerar a execução dos testes.
Armadilhas comuns
Problemas de autenticação
- Ao configurar o Git no fluxo de trabalho, certifique-se de que o endereço de e-mail e nome do usuário estão corretamente definidos.
- Utilize variáveis de ambiente para armazenar credenciais sensíveis, como chaves SSH ou tokens de acesso.
Problemas de build
- Ao realizar a build da aplicação, certifique-se de que as dependências sejam instaladas na configuração de produção.
- Considere utilizar uma ferramenta de build como Webpack para otimizar e minimizar o tamanho do código.
Outros problemas comuns
- Ajuste da cache para evitar recompilações desnecessárias durante a execução dos fluxos de trabalho
- Tratamento de erros em tempo real, evitando a interrupção da build
Conclusão
Essa abordagem de CI/CD utilizando GitHub Actions oferece uma solução escalável e eficiente para projetos PHP e Node.js, garantindo que as dependências estejam corretas, os testes sejam executados corretamente e a aplicação seja buildada e implantada no repositório remoto. Além disso, essa abordagem flexível permite ajustar o fluxo de trabalho às necessidades específicas do projeto.
Para prosseguir e aumentar ainda mais a eficiência da execução dos fluxos de trabalho, considera-se a implementação de ferramentas como um proxy HTTP para acelerar os testes ou a utilização de uma ferramenta de build como Webpack para otimizar o código.
Além disso, é recomendável que sejam estudadas outras áreas relacionadas, como:
- Armazenamento e tratamento de dados: A implementação de uma solução de armazenamento escalável e eficiente para lidar com os dados gerados durante a execução dos fluxos de trabalho.
- Segurança: A implementação de mecanismos de segurança para proteger o acesso aos repositórios remotos, bem como os dados gerados pelos fluxos de trabalho.
Referências
- GitHub Actions - Como funciona? Disponível em: <https://docs.github.com/pt/actions>. Acesso: 2024.
- CI/CD para PHP. Martin Fowler. Disponível em: <https://martinfowler.com/articles/cd-for-php.html>. Acesso: 2024.
- Segurança em Aplicativos - OWASP. OWASP. Disponível em: <https://owasp.org/>. Acesso: 2024.
- Best Practices for CI/CD with GitHub Actions. Thoughtworks. Disponível em: <https://www.thoughtworks.com/en-us/articles/best-practices-for-ci-cd-with-github-actions>. Acesso: 2024.
- 12 Fatores para Desenvolvimento de Aplicativos. 12factor.net. Disponível em: <https://12factor.net/>. Acesso: 2024.