DevOps, como começar? ...e por que?
Tags: devops, developer, cicd, deploy
Published: 2024-03-21 00:55:27

Talvez a pergunta inicial seria: "Por que eu, um engenheiro de software (ou desenvolvedor, ou backend, ou frontend, ou QA, ou etc...) devo conhecer DevOps?" e uma possível resposta direta seria algo como: "porque você que desenvolve deveria saber como entregar e cuidar de seu desenvolvimento em produção, faz parte do ciclo", o chamado deploy e onde entra o QA que coloquei na pergunta acima? Ora, o QA entra principalmente em contribuir com a automação de testes na esteira de CI/CD, além de que conhecimento e como dizem, canja de galinha, não faz mal a ninguém.

DevOps é uma cultura que deve ser difundida no time todo, mas também na comunidade, na tribo e até mesmo na sua empresa como um todo.

Como regra geral, pelo que vejo no mercado, grandes corporações e com a TI bem estruturada, por vezes, tem times especializados em DevOps/SRE, o que na minha opinião é super saudável, pois em teoria, estas pessoas são o oráculo sobre este assunto. Computação é uma área tão grande que temos especialistas em áreas diversas, mas o time de desenvolvimento precisa ter ao menos o conhecimento básico sobre este tema. Tenho a mesma opinião sobre QA/Testes, mas ainda vou escrever um artigo sobre isto.

Resumindo de forma bem simples DevOps é a junção de Desenvolvimento e Operações então podemos entender ainda de forma simplificada, como desenvolver, colocar em produção, acompanhar (não só no deploy, mas por toda a vida útil da aplicação, através da observabilidade) e ajustar o leme do navio para manter a aplicação no ar e saudável para que comporte atender as requisições necessárias. Tudo isso com automatizações.

Pra termos uma ideia do tamanho e importância do assunto, algumas bigtechs, com times de altíssima performance, fazem milhares de deploys por dia, dando uma grandeza de deploys a cada alguns segundos!!! Agora te pergunto: como isso seria possível, sem automação, sem a cultura DevOps?? Bem, a história nos mostra que não seria possível sem DevOps. E pra que isso tudo? Pra entregar antes e frequentemente, desta forma permitindo entregas estratégicas quanto ao mercado, trazendo velocidade das empresas perante seus concorrentes.

Com a grande notoriedade da arquitetura de microsserviços, mais ainda que DevOps se faz necessário.

Pra colocar a cultura DevOps, a filosofia DevOps, em prática, é necessário conhecimento e ferramentas. No mercado existem várias ferramentas semelhantes ou que fazem parte do trabalho comum entre elas. O objetivo deste artigo é trazer pra você leitor, um caminho das pedras bem inicial, te guiando no que é importante aprender, buscar conhecimento, pra entrar no mundo do DevOps e claro, com o passar do tempo, com a experiência adquirida, você deve se aperfeiçoar, buscar outras ferramentas complementares e ainda experimentar outras ferramentas semelhantes a estas que indicarei, pra então, com o seu julgo, entender quais fazem mais sentido pra sua realidade do dia-a-dia. O fato é que entendendo a importância e conhecendo algumas das principais ferramentas, você terá o conhecimento básico e necessário que você, desenvolvedor, precisa ter.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wa99r5eusaa8sui2koxx.png)

Então vamos lá:

- **GNU/Linux**: Com mais de 30 anos de existência, o GNU/Linux está mais do que comprovado sobre sua segurança, competência, qualidade e sendo um software livre e de código fonte aberto e em geral sem um licenciamento pago, é mandatário para fazer funcionar a principal peça da arquitetura de microsserviços, o próprio microsserviço. Entender a estrutura de diretórios do sistema operacional, entender sobre o agendamento de tarefas, entre outras coisas que é importante aprender sobre o sistema operacional, se faz necessário. Portanto ter conhecimento em GNU/Linux é algo essencial. Vale uma leitura deste outro [link](https://dev.to/kbonassi/linux-para-desenvolvedores-qual-o-melhor-34nd) pra que você, dê uma chance de aprendizado deste grande sistema operacional. Caso você não possa ou não queira substituir o GNU/Linux como seu sistema operacional padrão no seu computador, crie uma máquina virtual, para poder estuda-lo.

- **Bash**: O Bash é um dos possíveis shells (linha de comando) para o GNU/Linux, existem outros, mas o Bash é o shell padrão de muitas distribuições GNU/Linux. É importante saber sobre o shell, para necessidades tais como, cópia de arquivos, criação de diretórios, verificar o conteúdo de arquivos, logs, iniciar e parar serviços (daemons), entre outras tantas funcionalidades que o shell nos oferece. O fato é que o shell é o console para que você possa interagir com o sistema operacional GNU/Linux.

- **Docker**: Mais uma vez falando de microsserviços, a utilização de containers também é algo essencial e eu diria que talvez é a grande sacada pra poder funcionar este tipo de arquitetura, e o Docker é a ferramenta mais utilizada para a construção de containers, saber Docker é fundamental para o DevOps.

- **Kubernetes**: O Kubernetes é um orquestrador de containers desenvolvido pela Google e com o uso dele, temos a possibilidade escalar nossas aplicações de forma automatizada, aumentando a disponibilidade da aplicação quando necessário e diminuindo-a quando possível, permitindo o balanceamento de carga da aplicação, entre diversas outras funcionalidades que o Kubernetes nos trás. E você pode aprender tudo isso diretamente do seu computador pessoal, com o uso de "distribuições" Kubernetes, tais como o K3s, MiniKube, Kind, MicroK8s, entre outros.

- **Git**: O Git é desde alguns anos atrás o principal versionador de código. Existem as ferramentas muito utilizadas que fazem o versionamento e trazem mais algumas features interessantes, como o Github, Gitlab, Bitbucket, é importante conhece-las, mas antes de tudo é importante conhecer o Git mesmo, portanto, baixe-o, instale-o em seu computador e estude-o, principalmente as funcionalidades mais triviais. 

- **Ansible**: O Ansible, uma ferramenta desenvolvida pela Redhat, que nos permite gerenciar o ciclo de vida das aplicações, desde o provisionamento até o deploy, automatizando tarefas como criação de usuários, backup, provisionamento de ambientes (dev, hml e prd), gerenciamento de servidores, etc. Enfim, também é uma ferramenta importante para o DevOps.

- **Jenkins**: Jenkins é a ferramenta responsável por automatizar toda a cadeia de integração contínua e entrega contínua, o CI/CD. Com ele podemos definir esteiras que automatizam todo o processo de CI/CD, ou seja, desde o ponto que o desenvolvedor termina o desenvolvimento até o deploy deste desenvolvimento, passando por etapas como compilação, testes automatizados, verificações estáticas, entre outras automatizações que ele nos permite.

Enfim, existem tantas outras ferramentas que depois que você estiver adaptado a estas apresentadas, deve conhecer também, tais como Terraform, Vagrant, Podman, Grafana, Splunk, Prometheus, Jaeger Kibana, etc, a lista é longa, mas comece pelas apresentadas, tenha foco inicialmente nestas pois não adianta querem abraçar o mundo de uma única vez, estas já lhe darão o empurrão inicial para este conhecimento.

That's all folks!