
Git Workflows para NetDevOps: Um Cheatsheet Prático para gerenciar infraestrutura como Código
6 min read
À medida que a automação de redes amadurece, passamos a tratar nossas configurações, scripts e playbooks como o que realmente são: código. E se estamos lidando com código, precisamos de uma ferramenta para gerenciar seu ciclo de vida, controlar versões, facilitar a colaboração e garantir a integridade. Essa ferramenta é o Git. Para um engenheiro de redes, dominar o Git é tão fundamental quanto entender os protocolos de roteamento
Adotar o Git como a fonte de versionamento para a configuração da sua rede transforma a maneira como você opera. Mudanças deixam de ser comandos ad-hoc digitados em uma sessão SSH à meia-noite e passam a ser commits rastreáveis, revisáveis e, o mais importante, reversíveis. O Git não é apenas um sistema de backup; é a base para uma operação de rede moderna, habilitando práticas como revisão por pares (code review), testes automatizados (CI/CD) e auditoria.
Este guia é um cheatsheet focado nos comandos que mais utilizo no Git e que vez ou outra preciso de um refresh.
Por que Git para Redes? O Modelo de IaC
Infraestrutura como Código (IaC) é a prática de gerenciar e provisionar infraestrutura através de arquivos de definição legíveis por máquina, em vez de configuração manual. O Git é o pilar que sustenta essa prática.
| Benefício do Git para NetDevOps | Descrição |
| Controle de Versão | Cada mudança na configuração da rede é um commit. Você sabe quem mudou, o que mudou, por que mudou e quando mudou. |
| Reversibilidade | Uma mudança causou um problema? git revert permite reverter um commit específico de forma segura, sem adivinhações. |
| Colaboração e Revisão | O fluxo de Pull/Merge Request permite que as mudanças sejam revisadas por outros membros da equipe antes de serem aplicadas, reduzindo erros. |
| Branching (Ramificação) | Trabalhe em novas features (como a configuração de um novo datacenter) em um branch isolado, sem impactar a configuração de produção. |
| Automação (GitOps) | O repositório Git se torna o gatilho para pipelines de CI/CD. Um merge no branch principal pode disparar um playbook Ansible para aplicar a configuração. |
Git Cheatsheet Básico para o Dia a Dia
Estes são os comandos que você usará 90% do tempo. Mantenha esta lista por perto.
| Comando | Descrição |
git status | Mostra o estado do seu diretório de trabalho: arquivos modificados, novos, etc. |
git add <arquivo> | Adiciona um arquivo modificado à área de preparação (staging area). |
git commit -m "msg" | Salva as mudanças da staging area no histórico do repositório com uma mensagem. |
git push | Envia seus commits locais para o repositório remoto. |
git pull | Baixa as mudanças do repositório remoto e as mescla com seu branch local. |
git checkout -b <nome> | Cria um novo branch e muda para ele. Sempre trabalhe em um branch! |
git checkout <nome> | Muda para um branch existente. |
git merge <branch> | Mescla as mudanças de outro branch no seu branch atual. |
git log --oneline | Mostra um histórico de commits de forma concisa. |
git diff | Mostra as diferenças entre o seu diretório de trabalho e o último commit. |
O Workflow de Feature Branch: Um Padrão para NetDevOps
Nunca, jamais, faça commit diretamente no branch main (ou master). O branch main deve sempre refletir o estado desejado da sua produção. Todas as mudanças devem seguir o Feature Branch Workflow.
sequenceDiagram
participant Dev as Engenheiro
participant Local as Repositório Local
participant Remote as Repositório Remoto (GitHub)
participant CI_CD as Pipeline CI/CD
Dev->>Local: git checkout main
Dev->>Local: git pull origin main
Dev->>Local: git checkout -b feature/nova-vlan
Note over Dev,Local: Trabalha na nova feature
Dev->>Local: git add .
Dev->>Local: git commit -m "feat: Adiciona VLAN 100"
Dev->>Remote: git push origin feature/nova-vlan
Dev->>Remote: Abre Pull Request (PR)
Remote->>CI_CD: Dispara pipeline de CI (testes)
CI_CD-->>Remote: Testes passaram
Note over Remote: Outro engenheiro revisa e aprova o PR
Remote->>Local: Engenheiro mescla o PR no branch 'main'
Remote->>CI_CD: Dispara pipeline de CD (deploy)
CI_CD-->>Remote: Deploy concluído com sucesso
Cenário: Você precisa adicionar uma nova VLAN de voz (VLAN 100) em todos os switches de acesso.
Passo a Passo do Workflow:
Sincronize seu Repositório Local: Antes de começar, garanta que seu branch
mainlocal está atualizado com o remoto.git checkout main git pull origin mainCrie um Novo Branch para sua Mudança: O nome do branch deve ser descritivo.
git checkout -b feature/add-voice-vlan-100Faça as Mudanças Necessárias: Modifique os arquivos de configuração, templates Jinja2, ou variáveis do inventário Ansible para adicionar a VLAN 100.
# Exemplo: editando um arquivo de variáveis # vim group_vars/access_switches.ymlTeste suas Mudanças Localmente: Use ferramentas como
ansible-lint,pytest, ou um laboratório virtual (EVE-NG, GNS3) para validar que sua mudança funciona como esperado e não quebra nada.Faça o Commit das suas Mudanças: Adicione os arquivos modificados e faça o commit com uma mensagem clara, seguindo um padrão como o Conventional Commits.
git add group_vars/access_switches.yml git commit -m "feat: Adiciona VLAN 100 para o serviço de voz"Envie seu Branch para o Repositório Remoto:
git push origin feature/add-voice-vlan-100Abra um Pull Request (PR) ou Merge Request (MR): Na interface do seu provedor Git (GitHub, GitLab, Bitbucket), abra um PR do seu branch (
feature/add-voice-vlan-100) para o branchmain.Descreva o propósito da mudança.
Associe o PR a um ticket do Jira ou outra ferramenta de gerenciamento.
Revisão por Pares (Code Review) e CI:
Outro membro da equipe revisa suas mudanças, sugere melhorias e, finalmente, aprova.
Um pipeline de CI é disparado automaticamente, rodando testes (
pytest,ansible-lint) contra o seu branch para uma validação final.
Merge: Após a aprovação e o sucesso do pipeline de CI, o PR é mesclado no branch
main.Deploy (Opcional, mas recomendado - GitOps): O merge no
mainpode disparar um pipeline de CD (Continuous Deployment) que executa um playbook Ansible em produção, aplicando a mudança na rede real.Limpeza: Após o merge, você pode deletar o branch local e remoto.
git checkout main git branch -d feature/add-voice-vlan-100 git push origin --delete feature/add-voice-vlan-100
Comandos Avançados Úteis (Quando as Coisas dão Errado)
| Comando | Descrição | Quando Usar |
git revert <commit> | Cria um novo commit que desfaz as mudanças de um commit anterior. Seguro para o histórico compartilhado. | Quando uma mudança já mesclada no main causou um problema em produção. |
git reset --hard <commit> | Move o ponteiro do branch para um commit anterior, descartando todas as mudanças posteriores. Perigoso, reescreve o histórico. | Apenas em branches locais, para descartar commits que você ainda não compartilhou. |
git stash | Salva temporariamente suas mudanças não commitadas para que você possa trocar de branch. | Quando você precisa mudar para outro branch urgentemente, mas não quer fazer commit do seu trabalho inacabado. |
git cherry-pick <commit> | Aplica um commit específico de outro branch no seu branch atual. | Quando você precisa de uma correção de bug que está em outro branch, mas não quer mesclar o branch inteiro. |
Referências:
