Acesse o painel da sua conta

Não tem uma conta? Registrar

Entrar em contato

Visite também nosso site craftxp.com.br

  • img
  • img
  • img
  • img
  • img
  • img

Entre em contato

GitHub Actions na Prática: Automatizando CI/CD com Workflows Eficientes

GitHub Actions na Prática: Automatizando CI/CD com Workflows Eficientes

Por que GitHub Actions?

O GitHub Actions revolucionou a forma como equipes de desenvolvimento automatizam seus fluxos de trabalho. Diferente de soluções terceirizadas como Jenkins ou CircleCI, ele está nativamente integrado ao ecossistema GitHub — sem necessidade de servidores extras, configurações complexas de webhook ou plugins externos.

Com o GitHub Actions, cada push, pull request ou release pode disparar automaticamente pipelines de build, teste e deploy. E o melhor: para repositórios públicos, a automação é gratuita e ilimitada.

Estrutura de um Workflow

Workflows são definidos em arquivos YAML dentro do diretório .github/workflows/. Cada workflow é composto por:

  • Eventos (on) — o que dispara o workflow (push, pull_request, schedule)
  • Jobs — unidades de trabalho que rodam em paralelo por padrão
  • Steps — comandos ou ações executados sequencialmente dentro de um job
  • Runners — máquinas virtuais Ubuntu, Windows ou macOS que executam os jobs

Workflow Básico: Testes Automáticos

name: CI\n\non:\n  push:\n    branches: [main]\n  pull_request:\n    branches: [main]\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Setup Node.js\n        uses: actions/setup-node@v4\n        with:\n          node-version: 20\n          cache: 'npm'\n\n      - run: npm ci\n      - run: npm test\n      - run: npm run build

Este workflow executa a cada push ou PR na branch main: faz checkout do código, configura o Node.js 20 com caching automático das dependências, instala pacotes com npm ci (instalação limpa e reprodutível), roda os testes e verifica se a build não está quebrada.

Matriz de Testes (Matrix Strategy)

Testar em múltiplas versões ou sistemas operacionais é trivial com a estratégia de matriz:

jobs:\n  test:\n    runs-on: ${{ matrix.os }}\n    strategy:\n      matrix:\n        os: [ubuntu-latest, windows-latest]\n        node: [18, 20, 22]\n\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-node@v4\n        with:\n          node-version: ${{ matrix.node }}\n      - run: npm ci && npm test

Isso gera 6 execuções paralelas (3 versões do Node × 2 sistemas operacionais), garantindo que seu código funcione em todas as combinações sem esforço manual.

Deploy Automático com Environments

name: Deploy to Production\n\non:\n  push:\n    branches: [main]\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    environment: production\n\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Build Docker image\n        run: docker build -t app:latest .\n\n      - name: Push to registry\n        env:\n          DOCKER_USER: ${{ secrets.DOCKER_USER }}\n          DOCKER_PASS: ${{ secrets.DOCKER_PASSWORD }}\n        run: |\n          echo \"$DOCKER_PASS\" | docker login -u \"$DOCKER_USER\" --password-stdin\n          docker push app:latest\n\n      - name: Deploy via SSH\n        uses: appleboy/ssh-action@v1\n        with:\n          host: ${{ secrets.SERVER_HOST }}\n          username: deploy\n          key: ${{ secrets.SSH_PRIVATE_KEY }}\n          script: |\n            cd /opt/app\n            docker-compose pull\n            docker-compose up -d

O uso de Environments do GitHub permite adicionar proteções como aprovação manual antes do deploy em produção, além de armazenar secrets específicos por ambiente (staging vs production).

Workflows Agendados (Cron Jobs)

Para tarefas periódicas como limpeza de dados ou execução de testes noturnos:

on:\n  schedule:\n    - cron: '0 6 * * 1'   # Toda segunda-feira às 06:00 UTC

Reutilização com Composite Actions

Evite repetição criando ações reutilizáveis. Em .github/actions/setup-node/action.yml:

name: 'Setup Node.js with pnpm'\ninputs:\n  node-version:\n    required: false\n    default: '20'\n\nruns:\n  using: 'composite'\n  steps:\n    - uses: actions/setup-node@v4\n      with:\n        node-version: ${{ inputs.node-version }}\n    - run: corepack enable && pnpm install\n      shell: bash

Depois, use em qualquer workflow: uses: ./.github/actions/setup-node.

Boas Práticas

  • Use npm ci em vez de npm install — mais rápido, mais seguro, respeita o lockfile
  • Ative o cache de dependênciascache: 'npm' no setup-node reduz o tempo de instalação de 2 minutos para 10 segundos
  • Secrets nunca na mão — use ${{ secrets.NOME }} para senhas, tokens e chaves
  • Idempotência — workflows devem produzir o mesmo resultado independente de quantas vezes forem executados
  • Fail fast — interrompa a matriz quando um job crítico falha com fail-fast: true

Conclusão

O GitHub Actions elimina a complexidade operacional da automação de CI/CD, oferecendo integração direta com o ecossistema GitHub, mais de 18.000 ações prontas no Marketplace e uma sintaxe YAML simples e declarativa. Comece com um workflow básico de testes, evolua para matrizes, adicione deploy com environments e, quando sentir necessidade, crie suas próprias composite actions. Em minutos, seu repositório ganha automação profissional sem sair do GitHub.

Craft XP
Craft XP