GIT in the house!!! Parte 1 de 2.

Olá a todos.

Já falamos num passado recente na ideia de ter um git  server no nosso homelab e como isto poderia ajudar o nosso workflow, e como melhoraria as nossas capacidades técnicas, ajudando a conseguir aquele trabalho espetacular com que sonhamos a que tempos.
Fazendo um drill down a esse post, não falamos exatamente do que faz um git server – sim eu sei que muitos de vós sabem o que é. Há quem não saiba, e este post vem corrigir isso.

Para quem tem um homelab sabe que o gerir ser uma tarefa desafiante, especialmente se estivermos a executar vários serviços e aplicativos. Um sysadmin necessita de garantir que sua infraestrutura seja segura, confiável e eficiente. No homelab ou no seu local de trabalho.

Uma ferramenta que pode nos ajudar nesta tarefa é o Git. O Git é um sistema de controle de versão que permite acompanhar as alterações no nosso código, arquivos de configuração e outros documentos importantes. Neste two-part-post, iremos discutir como o uso do Git pode ajudar a gerenciar o nosso homelab e para a semana apresentarei uma receita pratica para instalar um gittea.

A hacker is wiping Git repositories and asking for a ransom | ZDNET

Como hoje em dia, é tudo praticamente  código as infrastructure, ou ficheirada de ficheiros de configuração em texto – e quem não o sabe, deve estar preso nos anos 2000/2010 –  iremos imaginar todas as nossas configurações, desde as mais simples de apache, até aquela configuração heavy-metal de um elasticsearch que usamos para testar um projeto para o trabalho.
Com essa imagem em mente é relativamente fácil entender que nas nossas configurações e reconfigurações possamos fazer um erro nos dez ficheiros que alteramos.

E sem querer, ao colocar uma virgula, espaço ou tab num yaml file, ficamos sem a nossa aplicação que tanto trabalho nos deu a configurar.

If only houvesse uma aplicação que nos auxiliasse a reverter as alterações para um estado em que as nossas configurações funcionasse. Ela existe e é o GIT.

No seu core, quais as funções principais que o Git garante?

Controle de versão:

O controle de versão é o processo de tracking de alterações nos ficheiros ao longo do tempo. Ele permite nos reverter para uma versão anterior de um arquivo se houver um problema ou se quisermos ver o que mudou ao longo do tempo. Existem inclusive plugins de git para yum/dnf de forma ao nosso /etc/ estar perfeitamente auditado e todas as alterações visíveis de forma a que possamos reverter um erro que tenhamos causado inadvertidamente.

Com o Git, podemos assim acompanhar as alterações nos nossos ficheiros de configuração, scripts e outros documentos importantes. Na pratica significa que podemos ver facilmente o que mudou ao longo do tempo e reverter para uma versão anterior, se necessário.
Além disto, o git tem uma vertente de trabalho colaborativo. Uma equipa, de dois ou dois mil podem colaborar em melhorar codigo, configurações ou documentos.

Branching:

Para mim, um dos recursos mais poderosos do Git é a ramificação (branching). A ramificação permite que criemos uma cópia separada do nosso código, arquivos de configuração e outros documentos. Isto é extremamente útil se quisermos experimentar um novo recurso ou fazer alterações sem afetar a base de código principal. Pensem nisto como um what-if com a possibilidade de rollback se a coisa não funcionar como espectável.

Num ambiente de homelab, a ramificação é muito útil se nós quisermos testar novas configurações ou fazer alterações sem afetar o ambiente que está ao “vivo”. Podemos criar uma nova ramificação, fazer as nossas alterações e, em seguida, combinar as alterações novamente na base de código principal quando estiver pronto e distribuir automaticamente pelos sistemas destinatários

Colaboração:

O Git foi projetado para ser uma ferramenta colaborativa na linha do seu pedigree – cvs e svn. Ele permite que várias pessoas trabalhem na mesma base de código ou arquivos de configuração ao mesmo tempo. Cada pessoa pode fazer alterações em sua própria cópia dos arquivos e, em seguida, combinar as alterações.

Num ambiente de homelab, a colaboração é muito útil se tivermos várias pessoas trabalhando na nossa infraestrutura. Isto aplica-se igualmente a situações em ambiente profissional.
Por exemplo, se tivermos uma equipe de administradores, cada pessoa pode trabalhar em sua própria versão dos arquivos de configuração e depois combinar as alterações de uma forma aprovada e controlada.
Isso irá muito ajudar a evitar conflitos e garantir que todos estejam a trabalhar com a versão mais recente dos arquivos.

Restaurar e recuperar:

Um dos principais benefícios de usar o Git é que ele fornece um backup do nosso código, arquivos de configuração e outros documentos. Se algo correr mal com o nosso homelab, poderemos reverter facilmente para uma versão anterior dos arquivos.

Para alem disto, o Git fornece um mecanismo para recuperar alterações perdidas. Se nós acidentalmente apagarmos um arquivo ou caso façamos um oops, poderemos reverter facilmente para uma versão anterior do ficheiro/arquivo.

E quais as alternativas para ter o nosso próprio git server?

GitLab: GitLab é um gestor de repositórios Git baseado em interface web que fornece gestão do nosso código-fonte, integração contínua e ferramentas de implantação contínua. Ele permite que os utilizadores criem, gerenciem e implementem repositórios Git e também forneça recursos como tracking de problemas, wikis e controle de acesso.

Press and Logos | GitLab

GitHub: GitHub é um serviço de repositório Git baseado igualmente em componente web que fornece também gestão do código-fonte, tracking de problemas e solicitações pull. A instancia publica do GitHub é o defacto standard  que é amplamente utilizado por projetos de código aberto e possui uma grande comunidade de desenvolvedores a trabalhar com ele. Foi adquirido nos últimos anos pela microsoft.

Bitbucket: Bitbucket é um serviço de hospedagem de repositórios Git baseado na web que fornece gestão de código-fonte, tracking de problemas e solicitações pull. É semelhante ao GitHub, mas pertence à Atlassian e tem foco na colaboração em equipe e gerenciamento de projetos, junto com as outras ferramentas como o confluence e jira.

Gitea: Gitea é o meu favorito e que hospedo no meu homelab nos últimos três anos. É um serviço Git auto-hospedado escrito em Go. Ele fornece uma interface da Web leve para gerenciar repositórios Git e inclui recursos como rastreamento de problemas, solicitações pull e um wiki built in, assim bem como ferramentas de CD/CI.

Gitolite: Gitolite é mais um servidor Git gratuito e de código aberto que fornece controle de acesso e permissões para repositórios Git. Ele foi projetado para ser fácil de configurar e usar e é frequentemente usado em pequenas organizações ou para uso pessoal.

Estas são apenas algumas das muitas opções disponíveis para efetuarmos self-hosting de repositórios Git no Linux. A escolha de qual deles devermos usar depende sempre das nossas necessidades e requisitos específicos.

E pronto, chegamos ao fim do nosso primeiro post do ano de 2024. Espero que tenham tido uma excelente entrada no novo ano, e que este post vos tenha ajudado a ter uma ideia das funções dos servidores git, e de como os podem utilizar para melhorar a vossa capacidade técnica, qual a melhor versão a implementar no vosso homelab, ou levarem para a vossa empresa uma ideia nova que vos faça sobressair.

Até ao próximo post. Se tiverem alguma duvida ou reparo, sabem onde me encontrar.
Abraço
Nuno