Versione workflows e evite quebras em produção

O que é e por que usar

Versionar workflows significa tratar cada automação do n8n — seus nós, conexões, parâmetros e expressões — como código-fonte versionado em Git, em vez de uma configuração que existe apenas dentro da instância em produção. Na prática, você passa a ter histórico de quem alterou o quê, quando e por quê, além da capacidade de reverter qualquer mudança em segundos. Isso resolve um problema estrutural do n8n: ao abrir um workflow ativo em produção e clicar em Save, você já está alterando a automação que está rodando. Não existe botão de desfazer nativo nem comparação entre versões dentro da interface.

Sem versionamento, qualquer edição feita às 18h de uma sexta-feira é efetiva imediatamente. Se o nó Set que traduz o campo course_id para o formato esperado pela API de destino estiver errado, o próximo webhook que chegar usará o mapeamento errado — não o da semana passada que funcionava. O único rollback possível é a memória de quem mexeu, e isso não escala quando o time tem mais de duas pessoas.

Automações de produção têm três características que tornam versionamento obrigatório: processam dados reais (financeiro, matrícula, pedido), respondem em tempo real e normalmente não têm alguém olhando cada execução. Um fluxo de cobrança que passa a disparar e-mail com valor errado, ou uma integração que matricula aluno no curso errado, gera prejuízo contábil antes de alguém notar. Versionar workflows é o que separa o cenário “o deploy quebrou, reverta em 30 segundos” do cenário “o deploy quebrou, vamos investigar por horas”.

Kanban board displayed on screen with charts and data analysis in modern office setup.

Pré-requisitos

  • n8n self-hosted (v1.30 ou superior) ou n8n Cloud com recurso de Source Control habilitado no plano.
  • Chave de API do n8n com escopo de leitura e escrita em workflows (Settings → API → Create API Key).
  • Repositório Git (GitHub, GitLab ou Bitbucket) com branch main protegida e branch staging para testes.
  • Segundo ambiente n8n — mesmo que seja uma instância Docker local rodando em localhost:5679. Sem staging, você não consegue testar antes de subir.
  • Noções de Git: commit, branch, merge e pull request. Não precisa ser avançado, mas precisa saber o que é reverter um commit.
  • Gerenciador de variáveis de ambiente para credenciais (arquivo .env, Docker secrets ou o gerenciador de credenciais do n8n separado por ambiente).

Exemplo Prático: Matrícula automática da Kognita (Stripe → Moodle)

A Kognita é uma EdTech fictícia que vende cursos online. Quando um aluno finaliza a compra no Stripe, um webhook chega ao n8n, o fluxo valida o pagamento, cria o usuário no Moodle via API REST, matricula o aluno no curso correto e envia um e-mail de boas-vindas pelo Postmark. O workflow tem 22 nós e processa entre 180 e 250 matrículas por dia.

Na semana passada, um desenvolvedor júnior foi ajustar um mapeamento às 18h40 de uma sexta. Ele editou um nó Set chamado “Normalizar metadados Stripe”, que converte metadata.course_id do Stripe para o formato courseid esperado pela API do Moodle. Em vez de salvar em um branch de teste, ele salvou direto em produção. A expressão correta era {{ $json.metadata.course_id }}, mas ficou {{ $json.course_id }}. O campo não existia, retornava undefined, e o nó seguinte usava um fallback para o curso de ID 1. Na segunda-feira, 87 alunos estavam matriculados no curso errado, e o suporte recebeu 31 chamados.

O que será automatizado

Vamos implementar um pipeline de versionamento que exporta os workflows do n8n para um repositório Git a cada alteração, promove mudanças de staging para produção via pull request e permite rollback em um comando. O objetivo é simples: nenhuma edição chega em produção sem passar por commit e aprovação, e reverter é um git revert seguido do pipeline de importação.

Resultado esperado

  • Histórico completo de cada versão de cada workflow, com diff visível em JSON.
  • Rollback em menos de 2 minutos para qualquer versão anterior.
  • Ambiente de staging espelhando produção para testes antes do merge.
  • Alertas quando a estrutura de um workflow muda sem PR correspondente.
A person creates a flowchart diagram with red pen on a whiteboard, detailing plans and budgeting.

Configuração Passo a Passo

  1. Crie o repositório e a estrutura de pastas. No GitHub, crie um repositório privado chamado kognita-n8n-workflows. A estrutura recomendada é:
    kognita-n8n-workflows/
    ├── .github/workflows/
    │   └── deploy.yml
    ├── workflows/
    │   ├── stripe-moodle-matricula.json
    │   └── welcome-email-postmark.json
    ├── scripts/
    │   ├── export.sh
    │   └── import.sh
    └── README.md
  2. Habilite o Source Control no n8n (Enterprise/Cloud). Em Settings → Source Control, conecte o repositório Git usando um token de acesso pessoal com escopo repo. Defina o branch de produção como main e o de desenvolvimento como staging. O n8n vai fazer commits automáticos a cada alteração de workflow.
  3. Se você está na Community Edition, use a API REST do n8n para exportar. Crie o script scripts/export.sh:
    #!/bin/bash
    set -e
    API_KEY="${N8N_API_KEY}"
    BASE_URL="${N8N_BASE_URL:-https://n8n.kognita.com.br/api/v1}"
    
    mkdir -p workflows
    
    curl -s -H "X-N8N-API-KEY: ${API_KEY}" \
      "${BASE_URL}/workflows?limit=250" \
      | jq -c '.data[] | {id, name, nodes, connections, settings}' \
      | while read -r wf; do
          NAME=$(echo "$wf" | jq -r '.name' | tr ' ' '-' | tr '[:upper:]' '[:lower:]')
          echo "$wf" | jq '.' > "workflows/${NAME}.json"
        done
    
    git add workflows/
    git commit -m "chore: export workflows $(date -u +%Y-%m-%dT%H:%M:%SZ)" || true
    git push origin main

    Agende esse script a cada 15 minutos no cron do servidor ou como job agendado.

  4. Configure o pipeline de importação via GitHub Actions. O arquivo .github/workflows/deploy.yml promove o conteúdo do repositório para o ambiente de destino sempre que houver merge em main:
    name: Deploy n8n workflows
    on:
      push:
        branches: [main]
        paths: ['workflows/**.json']
    
    jobs:
      deploy-prod:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v4
          - name: Importar workflows no n8n de produção
            env:
              N8N_API_KEY: ${{ secrets.N8N_PROD_API_KEY }}
              N8N_BASE_URL: ${{ secrets.N8N_PROD_URL }}
            run: |
              for file in workflows/*.json; do
                WF_ID=$(jq -r '.id' "$file")
                curl -s -X PUT "${N8N_BASE_URL}/workflows/${WF_ID}" \
                  -H "X-N8N-API-KEY: ${N8N_API_KEY}" \
                  -H "Content-Type: application/json" \
                  -d @"$file"
              done
  5. Separe credenciais por ambiente. Nunca comitee API keys, tokens do Stripe ou credenciais do Moodle no JSON do workflow. Use variáveis de ambiente no n8n ($env.MOODLE_TOKEN) e configure valores diferentes em staging e produção. Execute as instâncias com arquivos .env distintos:
    # .env.prod
    MOODLE_BASE_URL=https://moodle.kognita.com.br
    MOODLE_TOKEN=moodle_prod_xxxxx
    POSTMARK_TOKEN=pm_prod_xxxxx
    
    # .env.staging
    MOODLE_BASE_URL=https://moodle-staging.kognita.com.br
    MOODLE_TOKEN=moodle_staging_xxxxx
    POSTMARK_TOKEN=pm_staging_xxxxx
  6. Crie o fluxo de promoção em três etapas. Toda alteração segue: (a) editar workflow no n8n de staging e salvar; (b) rodar export.sh apontando para staging e abrir um PR para main; (c) com o PR aprovado e mergeado, o GitHub Actions importa em produção. Ninguém edita workflow direto na instância de produção.
  7. Habilite proteção de branch. No GitHub, em Settings → Branches, marque main como protegida, exija ao menos uma revisão antes do merge e bloqueie force push. Sem isso, alguém contorna o pipeline com um git push --force.
  8. Teste o rollback. Antes de confiar no processo, faça um revert de teste: git revert <hash-do-commit-ruim>, suba o PR, faça merge, e verifique no n8n se o workflow voltou à versão correta. Meça o tempo. O ideal é manter abaixo de 5 minutos.

Dicas e Variações

  • Versione também os workflows desativados. Muita gente exporta só os ativos.

Gostou do conteúdo? Inscreva-se para receber as novidades:

CATEGORIES:

rotinas

Tags:

Comments are closed