O que é DevOps?
Olá de novo, Kangaroozinho! O DevOps é um conceito não muito recente, mas ainda assim pouco popular por quem não é tão participante das bolhas de desenvolvimento. Esse conceito é muito importante e muito presente na rotina de todos os projetos, mesmo que, em alguma medida, seja despercebido.
Hoje, você vai entender um pouco mais sobre o que é essa metodologia (também muito chamada como uma cultura) e como ela pode já estar presente em seu projeto, mesmo de forma discreta, e como ela pode se tornar algo ainda mais fundamental para tornar seus softwares mais confiáveis.
Sumário
- O que é?
- O que faz?
- Principais tecnologias
- Conclusão
O que é DevOps?
O DevOps é um acrônimo, vindo de Development (desenvolvimento) + Operations (operações), ou seja, uma intersecção entre as equipes de desenvolvimento e de infraestrutura/sistemas. Para entendermos um pouco melhor, é necessário relembrar o que cada uma dessas equipes faz em um projeto, e então poderemos entender porquê o DevOps surge como uma solução.
Uma equipe de desenvolvimento é focada na manutenção e inovação de um software, implementando ajustes e novas funcionalidades ao projeto, fazendo com que ele sempre evolua, implementando novas versões.
Em contrapartida, as equipes de operações/infraestrutura focam na estabilidade do projeto, garantindo que o que está no ar mantenha seu funcionamento da forma mais estável quanto possível, e cada nova atualização pode apresentar um risco em potencial, com a possibilidade da chegada de bugs ou brechas de segurança.
Agora que entendemos melhor a responsabilidade de cada equipe, podemos ver que existe um conflito no que cada uma quer. Enquanto uma visa inovação, para a outra essa inovação pode acabar trazendo eventuais problemas.
Por isso, o DevOps se mostra uma proposta para resolver esse conflito, criando uma ponte de conversação e aproximação entre essas duas equipes tão dinstintas, garantindo que tanto o desenvolvimento do projeto seja feito em condições ideais para que o deploy seja feito com segurança e preservando a estabilidade para seguir para o ambiente de produção.
O que o DevOps faz?
Como mencionamos acima, a equipe de DevOps tem a responsabilidade de assegurar a qualidade de estabilidade do que é implementado em produção (deploy), mantendo um padrão seguro para isso. Dessa forma, essas equipes estão normalmente responsáveis por criar diversos tipos de automação que gerenciem as implementações.
Para as questões de desenvolvimento, é encorajado o uso de ambientes controlados que sejam o mais parecidos o possível com os ambientes de produção, muitas vezes adotando sistemas de containers que usem os mesmos sistemas, bibliotecas e arquiteturas que o ambiente final onde será feito o deploy.
O processo de desenvolvimento nos leva ao termo muito empregado de Continuous Integration (integração contínua), ao adotar a prática de repositórios onde uma equipe pode trabalhar junta no projeto, com o código produzindo por cada membro sendo integrado a esse repositório compartilhado entre o time.
Esse mesmo repositório normalmente é monitorado com criados pipelines de integração, com ações que realizam diversos testes automatizados para validar se o software está suficientemente estável para ser implementado, conferindo se os recursos essenciais estão respondendo como o esperado e, caso haja algum erro no projeto, ele pode ser identificado de forma muito mais rápida.
Sendo o par do CI, temos o CD (continuous delivery), que visa a entrega contínua desse software, ou seja, que esse software seja implementado automaticamente conforme novas versões são disponibilidazas através do CI. Isso é feito por meio de mais testes feitos pelos pipelines de entrega, que ajudam a garantir que o deploy das novas versões serão seguros e estão funcionais para irem de fato para o ambiente de produção, gerando uma nova camada de filtragem para evitar erros que possam comprometer o projeto.
Com todos os testes bem sucedidos, finalmente o software pode efetivamente ser implementado, onde então é constantemente monitorado e em caso de erros é possível tanto acionar as equipes de desenvolvimento quanto retornar o software a uma versão anterior de forma mais fácil.
Vale destaque ainda ao IaC (Infraestructure as a Code), do inglês para infraestrutura como código, onde as equipes DevOps criam também automações para a criação dos ambientes de homologação/produção através de scripts, que são capazes de via API conectar aos DataCenters para criar o servidor e definir toda a sua capacidade de processamento, assim como instalar e configurar os recursos que ele precisará para abrigar o software desenvolvido.
Isso, claro, é útil tanto para aspectos de qualidade de desenvolvimento quanto para a escalabilidade, permitindo adicionais mais servidores de forma totalmente dinâmica e automática conforme a necessidade de crescimento, garantindo também que o software seja entregue nele sempre que estiver pronto.
Principais ferramentas e tecnologias
Como pudemos ver, boa parte do trabalho da equipe DevOps é criar automações que visam a melhoria da qualidade do código e de sua implementação, através do CI/CD, IaC e monitoramento dos recursos que já estão no ar.
Durante as etapas de desenvolvimento, costuma-se adotar algumas ferramentas de versionamento de código, principalmente aquelas baseadas em Git, como o GitHub e o GitLab, permitindo que diversos devs colaborem em um mesmo repositório de forma muito mais eficiente.
Essas ferramentas também costumam permitir a criação dos pipelines que mencionamos, para automação dos testes e implantação, mas também sendo usado o Jenkins em alguns casos, a depender das necessidades e preferências do projeto e equipe.
Para a criação de ambientes container que mencionamos acima, um recurso bastante comum de se utilizar é o Docker, que permite automação na criação dos containers, permitindo maior replicação das condições de ambiente entre desenvolvimento, homologação e produção.
Já para a criação dos servidores e preparação dos ambientes, temos normalmente o Terraform como responsável pela criação e configurações iniciais do servidor, com o Ansible completando o trabalho ao rodar o restante da configuração, como a instalação de dependências e padronização de configurações para espelhar o ambiente correto que a aplicação precisa.
Conclusão
Com toda essa jornada de métodos, técnicas, procedimentos e automações, as equipes de DevOps conseguem tornar não somente mais próximas as equipes de desenvolvimento e operações, como também melhorar significativamente a qualidade do software entregue no fim do processo e reduzir muito as ocorrências de bugs.
Vale reforçar que a preocupação do DevOps não é apenas o deploy, mas também o acompanhamento posterior para acompanhar e garantir o funcionamento e qualidade da aplicação em produção, tornando a prática um trabalho sempre constante.
Se você gostou do nosso artigo, não deixe de continuar acompanhando nosso blog para encontrar mais conteúdo como esse, e nos vemos na próxima o/