AUTONETOPS

Cover Image for Git Workflows para NetDevOps: Um Cheatsheet Prático para gerenciar infraestrutura como Código

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 NetDevOpsDescrição
Controle de VersãoCada mudança na configuração da rede é um commit. Você sabe quem mudou, o que mudou, por que mudou e quando mudou.
ReversibilidadeUma mudança causou um problema? git revert permite reverter um commit específico de forma segura, sem adivinhações.
Colaboração e RevisãoO 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.

ComandoDescrição
git statusMostra 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 pushEnvia seus commits locais para o repositório remoto.
git pullBaixa 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 --onelineMostra um histórico de commits de forma concisa.
git diffMostra 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:

  1. Sincronize seu Repositório Local: Antes de começar, garanta que seu branch main local está atualizado com o remoto.

     git checkout main
     git pull origin main
    
  2. Crie um Novo Branch para sua Mudança: O nome do branch deve ser descritivo.

     git checkout -b feature/add-voice-vlan-100
    
  3. Faç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.yml
    
  4. Teste 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.

  5. 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"
    
  6. Envie seu Branch para o Repositório Remoto:

     git push origin feature/add-voice-vlan-100
    
  7. Abra 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 branch main.

    • Descreva o propósito da mudança.

    • Associe o PR a um ticket do Jira ou outra ferramenta de gerenciamento.

  8. 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.

  9. Merge: Após a aprovação e o sucesso do pipeline de CI, o PR é mesclado no branch main.

  10. Deploy (Opcional, mas recomendado - GitOps): O merge no main pode disparar um pipeline de CD (Continuous Deployment) que executa um playbook Ansible em produção, aplicando a mudança na rede real.

  11. 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)

ComandoDescriçãoQuando 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 stashSalva 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:

  1. Atlassian Git Tutorial

  2. Conventional Commits Specification

  3. Git Flow vs. GitHub Flow

;