Pular para o conteúdo principal

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

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

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

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

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

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

  6. 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:

DevOps

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.

dica

Cebraspe/FGV costumam cobrar as diferenças entre cada uma.

cicd


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.