Devops
Conceito
DevOps é uma metodologia que combina as equipes de desenvolvimento de software (Dev) e operações de TI (Ops) em um esforço conjunto para melhorar a entrega de software.
Princípios
-
Crie um processo repetível e confiável para entrega de software: Estabeleça um processo automatizado e previsível, tornando a entrega de software uma rotina simples e confiável.
-
Automatize tudo que for possível: Todas as etapas do processo de entrega de software devem ser automatizadas, desde a compilação do código até a configuração dos servidores e a implantação do sistema.
-
Mantenha tudo em um sistema de controle de versões: Documentação e outros artefatos relacionados ao software em um sistema de controle de versões, como o Git.
-
Se um passo causa dor, execute-o com mais frequência e o quanto antes: Antecipe e resolva problemas logo no início, realizando tarefas complicadas com mais frequência, como na Integração Contínua, para evitar erros futuros.
-
Concluído significa pronto para entrega: O princípio visa eliminar ambiguidades, garantindo que o trabalho esteja completamente concluído antes de ser considerado pronto para produção. Isso inclui implementação, testes, documentação e integração, com uma definição clara de que o trabalho está 100% pronto para entrega.
-
Todos são responsáveis pela entrega do software
Características
- Relação saudável entre áreas Dev e Ops construindo um ambiente de confiança;
- Promove um ambiente onde os erros são vistos como oportunidades de aprendizado;
- Teste, integração e entrega contínuos;
- Automação de deploy;
- Controle e monitoração;
- Gerenciamento de configuração;
- Orquestração de serviços;
- Avaliação de métricas e desempenho;
- Velocidade de entrega;
Desvantagens: Curva de aprendizado alta, requer mudança cultural, pode ser caro para pequenas equipes, complexidade no gerenciamento das ferramentas.
Ciclo Contínuo do DevOps
O ciclo contínuo do DevOps segue um modelo iterativo e automatizado para entregar software de forma rápida e confiável. As principais etapas são:
1. Planejar
- Objetivo: Estabelecer requisitos, metas e prazos.
- Ação: Definir o que será feito, quais são as prioridades e o cronograma do projeto.
- Ferramentas: Jira, Trello, Asana.
2. Desenvolver (Code)
- Objetivo: Codificar o software conforme os requisitos estabelecidos.
- Ação: Desenvolvedores escrevem o código, realizam revisões e ajustes.
- Ferramentas: Git, GitHub, GitLab, IDEs (Visual Studio Code, IntelliJ).
3. Construir (Build)
- Objetivo: Compilar o código e preparar o ambiente para testes.
- Ação: O código é compilado e transformado em pacotes executáveis, prontos para testes.
- Ferramentas: Jenkins, Maven, Gradle, Docker.
Build automatizado refere-se ao processo de compilar todos os arquivos de um sistema para gerar uma versão executável sem intervenção manual.
4. Testar
- Objetivo: Garantir que o código esteja livre de erros e falhas.
- Ação: Executar testes unitários, de integração e de aceitação. Validar que o software funcione como esperado.
- Ferramentas: Selenium, JUnit, TestNG, Jenkins.
5. Versão (Release)
- Objetivo: Preparar e liberar a versão do software para produção.
- Ação: O código validado é empacotado em uma versão estável, pronta para ser lançada. Pode envolver uma revisão final e aprovação.
- Ferramentas: Git, Docker, Spinnaker, Jenkins.
6. Implantar (Deploy)
- Objetivo: Colocar a versão do software em produção.
- Ação: A versão é implantada em um ambiente de produção. A automação é utilizada para garantir eficiência e minimizar erros.
- Ferramentas: Kubernetes, Docker, Ansible, Terraform.
7. Operar
- Objetivo: Manter o software em funcionamento e disponível.
- Ação: A equipe de operações gerencia a infraestrutura, realiza manutenção e resolve incidentes.
- Ferramentas: Ansible, Kubernetes, Chef, Puppet.
8. Monitorar
- Objetivo: Acompanhar o desempenho do software em produção.
- Ação: Monitoramento contínuo de métricas, logs e indicadores de desempenho para identificar problemas e otimizar o software.
- Ferramentas: Prometheus, Grafana, ELK Stack, Nagios.
💡 Ciclo de feedback contínuo: Cada etapa se retroalimenta com as informações da anterior, permitindo ajustes rápidos e melhorando o processo de desenvolvimento.
CI/CD
A Integração contínua é uma prática em que as alterações de código são integradas de forma frequente e automatizada em um repositório compartilhado.
O objetivo é identificar problemas de integração, conflitos e erros o mais cedo possível, garantindo que o software esteja sempre em um estado funcional. A integração contínua permite que as equipes trabalhem de forma colaborativa, integrando suas alterações de forma contínua e automatizada, o que reduz o risco de problemas decorrentes da integração tardia e melhora a eficiência do processo de desenvolvimento.
A Entrega contínua é uma abordagem que visa tornar o processo de entrega de software mais eficiente, confiável e rápida.
Compilação automatizada do código-fonte: Assim que um desenvolvedor conclui uma alteração no código, o sistema automaticamente compila o código para criar uma versão executável do software.
Diferentes tipos de testes, como testes unitários, testes de integração e testes de aceitação, podem ser realizados de forma automatizada.
Requer uma aprovação manual para que a implantação seja feita.
- Artefatos de implantação: pacotes de software, imagens de contêiner ou qualquer outro formato necessário para implantar o software em diferentes ambientes.
A Implantação contínua (Deployment Contínuos): Expansão da entrega contínua, onde o código é automaticamente implantado em produção assim que passa nos testes, sem intervenção manual.
Cebraspe/FGV costumam cobrar as diferenças entre cada uma.
Canary Releases
Canary Releases referem-se a uma estratégia de lançamento de software onde uma nova versão é liberada inicialmente para um pequeno subconjunto de usuários. Isso permite que a equipe de desenvolvimento monitore o comportamento da nova versão em tempo real, identificando rapidamente qualquer problema antes de liberá-la para toda a base de usuários.
Exemplo: Funcionalidades que algumas pessoas começam a ter em aplicativos e outras não. Instagram, Whatspp, etc.
Culturas de DevOps
- CALMS: Cultura, Automação, Lean, Medição, Compartilhamento.
- The Three Way: Fluxo Contínuo, Feedback Contínuo, Aprendizado Contínuo.
- GitOps: Infraestrutura e CD gerenciados via Git.