CI/CD com GitHub Actions: passo a passo.md
Guia técnico, direto ao ponto, para você construir pipelines confiáveis em projetos modernos sem complicação.
1. Visão geral do fluxo de CI/CD com GitHub Actions
Este artigo apresenta um caminho prático para configurar um fluxo de integração contínua e entrega contínua usando GitHub Actions. O foco é entregar feedback rápido, manter o código saudável e facilitar o deploy de versões estáveis para produção.
- Definição de gatilhos (push, pull_request) para rodar o fluxo nos momentos certos.
- Execução de etapas de build, testes e validação de qualidade do código.
- Uso de matrix para validar diferentes versões de runtime e ambientes.
- Etapas de deploy seguras com controles de ambiente e condições de sucesso.
2. Configuração inicial do repositório e do workflow
Crio o repositório com um workflow básico para validar o código sempre que houver mudanças no main ou em pull requests. A ideia é ter uma linha do tempo clara: build, testes e, quando apropriado, deploy.
Passos recomendados:
- Crie o diretório .github/workflows no seu repositório e adicione um arquivo YAML, por exemplo ci.yml.
- Defina gatilhos para push em main e para pull_request para manter feedback rápido durante o desenvolvimento.
- Defina um job de build com um runner adequado e inclua etapas de checkout, setup do ambiente, instalação de dependências e testes.
Exemplo de workflow (parcial) para um projeto Node.js:
name: CI
on:
push:
branches:
- main
pull_request:
branches:
- '**'
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14.x, 16.x]
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm test --if-present
- name: Build
run: npm run build --if-present
Observação: este é um template de ponto de partida. Adapte os passos conforme a sua stack (Python, Ruby, Java, etc.) e as suas necessidades de build e teste.
3. Aprimoramentos: matrix, cache e segredos
Para melhorar a cobertura de qualidade e reduzir o tempo de feedback, incluo matrix de versões, cache de dependências e uso seguro de segredos:
- Matrix de versões: validação em diferentes runtimes ou versões de dependências.
- Caching de dependências: acelera builds subsequentes usando actions/cache ou mecanismos nativos da linguagem.
- Segredos: armazeno chaves sensíveis em GitHub Secrets e acesso via ${‘${{ secrets.NOME_DO_SEGREDO }}’ } nos passos.
Exemplo de adição ao workflow para cache de npm e uso de secrets (trecho conceitual):
- name: Cache dependencies
uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
- name: Deploy to production
if: github.ref == 'refs/heads/main'
env:
API_KEY: ${{ secrets.API_KEY_PROD }}
run: |
echo "Deploy usando API_KEY_PROD..."
# comandos de deploy aqui
4. Deploy, práticas recomendadas e observabilidade
Para manter o pipeline estável, ativamos regras de proteção de ambiente, aprovadores e etapas de deploy apenas a partir de branches estáveis. Em produção, é comum exigir aprovação manual ou gates de qualidade antes do deploy final.
- Env-driven deploy: use ambientes/production com checks específicos antes do deploy.
- Boas práticas de build: gerar artefatos apenas com builds bem-sucedidos; versionar artifacts se aplicável.
- Observabilidade: inclua logs de build e resultados dos testes, e produza artefatos de relatório quando útil.
Resumo: com um workflow bem estruturado, você obtém feedback rápido, validação de qualidade e deploy controlado, reduzindo retrabalho e aumentando a confiança no ciclo de vida do código.
Gostou? Continue aprendendo comigo
Este guia é apenas o começo. Explore conteúdos complementares para aprofundar tópicos de pipelines, qualidade de código e práticas de entrega.
Sou Apaixonado pela programação e estou trilhando o caminho de ter cada diz mais conhecimento e trazer toda minha experiência vinda do Design para a programação resultando em layouts incríveis e idéias inovadoras! Conecte-se Comigo!