DevOps, CI/CD e contêineres

O que é DevOps? Cultura, práticas e o pipeline de entrega

Iniciante11 min de leituraAtualizado

Esta página foi traduzida do inglês com a ajuda de IA e conferida com o original. Ler a versão em inglês

DevOps é a prática de levar o software do editor do desenvolvedor até a produção de forma rápida, segura e repetível, derrubando o muro entre desenvolvimento e operações. Ao final deste guia, você vai entender por que esse muro existe, o que os pilares CALMS e as métricas DORA realmente medem, quais práticas importam primeiro e como reconhecer uma transformação DevOps que está dando errado.

O que você vai aprender

  • Explicar o conflito entre desenvolvimento e operações que o DevOps se propõe a resolver
  • Descrever os pilares CALMS e as quatro métricas de entrega DORA
  • Citar as práticas essenciais — controle de versão, CI/CD, infraestrutura como código, monitoramento — e como elas se encaixam
  • Comparar as formas comuns de organizar times para DevOps e os modos de falha de cada uma
  • Planejar um primeiro passo realista para um time que quer entregar com mais frequência

Toda organização que escreve software tem duas forças puxando em direções opostas. O desenvolvimento é recompensado pela mudança: novas funcionalidades, time to market menor, experimentos. As operações são recompensadas pela estabilidade: disponibilidade, capacidade previsível, nenhuma surpresa na sexta à noite. Quando esses dois grupos ficam em departamentos diferentes, com gestores e metas diferentes, o resultado natural é uma passagem de bastão — um pacote de release jogado por cima do muro com um documento de implantação anexado — e um processo de release lento, cheio de acusações, de que ninguém gosta. DevOps é o conjunto de ideias e práticas que surgiu para derrubar esse muro. Este guia explica o que o termo significa além do marketing, o que realmente muda em um time que o pratica e como começar.

O problema que o DevOps resolve

Imagine o ciclo tradicional. Um time de projeto constrói uma release durante vários meses. Os testes acontecem no final. Um comitê de aprovação de mudanças se reúne para aprovar a implantação. Operações instala tudo em servidores configurados à mão há um ano, seguindo um documento do Word, às 2 da manhã de um sábado. Quebra alguma coisa que nunca tinha quebrado no ambiente de testes, porque o ambiente de testes não é igual à produção. Os desenvolvedores são chamados, operações leva a culpa e a próxima release é empurrada para ainda mais longe, para "reduzir o risco".

O instinto de fazer releases com menos frequência é exatamente o inverso do que funciona. Uma release com seis meses de mudanças é enorme, difícil de testar e quase impossível de reverter. Uma release com um dia de mudanças é pequena, fácil de entender e, se falhar, a causa é óbvia. Lotes pequenos são a ideia mais importante por trás do DevOps: reduza o tamanho de cada mudança, e o risco, o medo e a cerimônia em torno das releases encolhem junto.

Duas outras pressões tornaram o modelo antigo insustentável. Times de produto que adotaram métodos ágeis passaram a produzir software potencialmente entregável a cada duas semanas, só para vê-lo esperar meses por uma janela de release. E a chegada das APIs de nuvem fez com que servidores, redes e load balancers pudessem ser criados por um script: a infraestrutura tinha virado software, e software precisa de práticas de engenharia de software.

CALMS: os cinco pilares

Uma forma muito usada de resumir o movimento é o acrônimo CALMS — Culture, Automation, Lean, Measurement, Sharing (cultura, automação, lean, medição, compartilhamento). Ele é útil justamente porque só uma das cinco letras fala de ferramentas.

Cultura. Desenvolvimento e operações compartilham a responsabilidade pelo serviço em produção. "You build it, you run it" é a versão extrema: o time que escreve um serviço fica de plantão por ele. A versão mais branda é que as preocupações operacionais — facilidade de deploy, monitoramento, capacidade, patches de segurança — fazem parte da definição de pronto, e não são problema de outra pessoa depois. Incidentes são investigados com post-mortems sem culpados, que buscam a causa sistêmica em vez da pessoa que digitou o comando.

Automação. Tudo o que é feito mais de duas vezes vira script: build, testes, empacotamento, provisionamento de servidores, deploy, rollback. Automação não serve só para economizar tempo. Um script pode ser repetido, revisado e testado — coisa que um runbook seguido por uma pessoa cansada não permite — e deixa os ambientes idênticos, e não apenas parecidos.

Lean. Emprestado da manufatura: trabalhar em lotes pequenos, limitar o trabalho em andamento, tornar o fluxo de trabalho visível e eliminar desperdícios — espera por aprovações, passagens de bastão entre times, retrabalho causado por defeitos encontrados tarde. O value stream mapping, em que você desenha cada etapa da ideia até a produção e mede quanto tempo o trabalho fica parado em cada uma, é o exercício clássico e costuma revelar que a maior parte do lead time é fila, não trabalho.

Medição. Não dá para melhorar o que não se mede. Isso significa métricas técnicas (tempo de build, frequência de deploy, taxas de erro, latência) e também de negócio (cadastros, pedidos, receita por hora), para que um deploy ruim apareça como um problema de negócio em minutos. As métricas precisam estar visíveis para todos, não trancadas em um dashboard de operações.

Compartilhamento. Conhecimento, ferramentas e código atravessam as fronteiras entre times. Desenvolvedores podem ler a configuração de produção e engenheiros de operações podem abrir pull requests no código da aplicação. Relatórios de post-mortem são publicados internamente. Pipelines reutilizáveis, imagens base e módulos Terraform são mantidos como produtos compartilhados.

As práticas essenciais

Os pilares são princípios; isto é o que um time faz de fato.

Tudo em controle de versão

O código da aplicação, obviamente, mas também scripts de build, definições de infraestrutura, configuração de servidores, migrações de banco de dados, dashboards e regras de alerta. Se não está no Git, não pode ser revisado, reproduzido nem revertido. Veja o guia de fundamentos do Git para a mecânica.

Integração contínua

Cada desenvolvedor faz merge na branch principal pelo menos uma vez por dia, cada merge dispara um build automatizado que compila o código e executa a suíte de testes, e um build quebrado é corrigido antes de qualquer outra coisa. O objetivo é encontrar problemas de integração minutos depois de criá-los, e não semanas depois. A integração contínua tem um guia próprio.

Entrega contínua

O build produz um artefato versionado e imutável — um jar, uma imagem de contêiner — que passa pelos ambientes sem alteração. O deploy é uma etapa automatizada por script, disparada com um clique (ou totalmente automática), e o pipeline prova que todo commit pode ir para produção. O deploy contínuo vai um passo além e publica em produção todo build verde sem decisão humana. O guia de pipeline de entrega cobre as etapas, as estratégias e as migrações de banco de dados envolvidas.

Infraestrutura como código

Servidores, redes, registros DNS, definições de cluster e suas configurações são declarados em arquivos, aplicados por ferramentas como Terraform ou OpenTofu e Ansible, e revisados como qualquer outra mudança. O velho hábito de entrar em um servidor e editar um arquivo à mão — que produz máquinas "snowflake" que ninguém consegue reconstruir — dá lugar à reconstrução a partir do código-fonte. O guia de infraestrutura como código aprofunda as ferramentas.

Contêineres e orquestração

Imagens Docker empacotam a aplicação com seu runtime para que desenvolvimento, CI e produção rodem exatamente os mesmos binários. O Kubernetes distribui esses contêineres em um cluster, reinicia-os quando falham e publica novas versões gradualmente. Contêineres não são obrigatórios para DevOps, mas tornam barato cumprir a promessa de "o mesmo artefato em todo lugar".

Monitoramento, logs e feedback

Métricas (Prometheus, Grafana), logs centralizados (a stack Elastic, Loki) e tracing distribuído fecham o ciclo: o time que fez o deploy de uma mudança vê o efeito dela nas taxas de erro e na latência em minutos. Os alertas acionam as pessoas que podem resolver o problema, e os dashboards são desenhados em torno dos sintomas percebidos pelo usuário, e não de gráficos de CPU.

Medindo a entrega: as métricas DORA

O programa DevOps Research and Assessment (DORA) passou anos pesquisando milhares de organizações e reduziu o desempenho de entrega a quatro números.

MétricaPergunta que ela respondeTimes de elite (valores típicos)
Frequência de deployCom que frequência o código chega à produção?Várias vezes por dia
Lead time para mudançasQuanto tempo do commit até estar rodando em produção?Menos de um dia
Taxa de falha de mudançasQue parcela dos deploys causa um incidente ou rollback?De poucos por cento a cerca de 15%
Tempo de restauração do serviçoQuanto tempo leva a recuperação de uma falha?Menos de uma hora

As duas primeiras medem vazão; as duas últimas, estabilidade. A descoberta mais importante da pesquisa é que elas andam juntas: times que fazem deploy com mais frequência também falham menos e se recuperam mais rápido, porque mudanças pequenas são mais seguras e pipelines automatizados permitem publicar uma correção tão rápido quanto uma funcionalidade. Escolher entre "rápido" e "confiável" é um falso dilema quando as práticas de engenharia estão estabelecidas.

Use as métricas como diagnóstico, não como meta a ser manipulada. Um time que faz dez deploys por dia com taxa de falha de 40% tem um problema de testes; um time com lead time de uma hora e releases trimestrais tem um problema no processo de aprovação.

Organizando os times

A forma como você desenha o organograma importa tanto quanto as ferramentas que compra. Alguns arranjos se repetem.

Silos de Dev e Ops, mais um "time DevOps" no meio. O antipadrão mais comum. Um novo time passa a ser dono dos pipelines e do cluster Kubernetes, os desenvolvedores abrem tickets para conseguir um deploy, e agora existem três silos em vez de dois.

Times de produto totalmente integrados. Cada time multidisciplinar é dono de um serviço de ponta a ponta: código, pipeline, infraestrutura, plantão. É o modelo mais puro e funciona bem em organizações com engenheiros fortes e um número limitado de serviços, mas duplica o trabalho de plataforma entre os times.

Time de plataforma mais times alinhados ao fluxo de valor. Os times de produto são donos de seus serviços; um time interno de plataforma oferece o caminho pavimentado (paved road) — um serviço de CI/CD, imagens base, um cluster, observabilidade, armazenamento de segredos — como um produto, com documentação e API. Os times de produto consomem a plataforma em modo self-service em vez de abrir tickets. Para a maioria das organizações de algum porte, esse é o arranjo que escala.

Ops alocado temporariamente. Um engenheiro de operações entra em um time de produto por alguns meses para construir a automação de deploy e treinar o time, depois segue adiante. Útil como transição, prejudicial se virar permanente, porque o conhecimento vai embora com o engenheiro.

Seja qual for a estrutura, o teste é simples: um desenvolvedor consegue levar uma mudança à produção sem esperar outro time? Se a resposta for uma fila de tickets, a transformação ainda não aconteceu.

Erros comuns

  • Ferramentas primeiro. Comprar Jenkins, Docker e Kubernetes e esperar que a cultura venha junto. As ferramentas amplificam qualquer processo que já exista; automatizar um processo quebrado só faz com que ele falhe mais rápido.
  • Renomear o time de operações. Trocar "Ops" por "DevOps" no organograma sem mudar responsabilidades, incentivos ou o processo de deploy.
  • Medir atividade em vez de resultados. Contar pipelines construídos ou contêineres rodando em vez de lead time e taxa de falha.
  • Pular as fundações chatas. Tentar canary releases antes de a suíte de testes ser confiável, ou Kubernetes antes de a aplicação poder ser configurada por variáveis de ambiente. Os princípios twelve-factor são um bom checklist para saber se a aplicação está pronta.
  • Deixar a segurança para o fim. Revisões de segurança como barreira final recriam o problema da passagem de bastão. Análise de dependências, varredura de imagens e análise estática pertencem ao pipeline desde a primeira semana, e é exatamente isso que o termo DevSecOps designa.
  • Transformação big bang. Anunciar que todos os times serão "DevOps até o terceiro trimestre". As transformações que dão certo começam com um time, um serviço, um pipeline, e copiam o que funcionou.

Por onde começar

  1. Mapear o caminho atual até a produção

    Anote cada etapa entre um commit mergeado e um deploy rodando, quem a executa e quanto tempo o trabalho espera em cada fase. O tempo de espera, e não o de trabalho, costuma ser a surpresa.
  2. Colocar tudo em controle de versão e automatizar o build

    Um único comando que gera o artefato implantável a partir de um checkout limpo, executado em um servidor de CI a cada push. Nada mais é possível sem isso.
  3. Tornar a suíte de testes confiável

    Um pipeline que fica vermelho metade do tempo por motivos que ninguém investiga acaba ignorado. Apague ou corrija os testes instáveis (flaky), mantenha o build abaixo de dez minutos e trate uma branch principal vermelha como a prioridade máxima do time.
  4. Automatizar o deploy com script

    Substitua o runbook por um script ou etapa de pipeline que faça deploy em um ambiente de testes com o mesmo formato da produção. Depois, reutilize esse mesmo script para a produção.
  5. Adicionar um monitoramento que o time realmente olhe

    Um dashboard com taxa de requisições, taxa de erros e latência por serviço, com um alerta sobre a taxa de erros, fornece o ciclo de feedback que torna seguras as releases pequenas e frequentes.
  6. Aumentar a frequência de release de forma deliberada

    Passe de mensal para quinzenal e depois para semanal. Cada passo expõe o próximo gargalo — aprovações manuais, migrações de banco de dados, divergência entre ambientes —, que vira a próxima coisa a automatizar.

Principais pontos

  • O DevOps enfrenta o conflito estrutural entre times recompensados pela mudança e times recompensados pela estabilidade, dando a eles a responsabilidade compartilhada pelo serviço em produção.
  • Lotes pequenos são a ideia central: mudanças menores são mais fáceis de testar, implantar, entender e reverter, então fazer releases com mais frequência reduz o risco em vez de aumentá-lo.
  • CALMS — cultura, automação, lean, medição, compartilhamento — descreve o movimento; só a automação trata de ferramentas.
  • As práticas são concretas: tudo em controle de versão, integração contínua, um pipeline de entrega que produz artefatos imutáveis, infraestrutura como código e um monitoramento que devolve informação ao time.
  • As quatro métricas DORA medem vazão e estabilidade juntas, e os times de alto desempenho melhoram as duas ao mesmo tempo.
  • Estruture os times para que um desenvolvedor chegue à produção sem fila de tickets; um "time DevOps" entre Dev e Ops costuma virar um terceiro silo.
  • Comece com um time e com as fundações chatas — build repetível, testes confiáveis, deploy automatizado — e aumente a frequência de release passo a passo.

Fontes e leituras complementares

Perguntas frequentes

DevOps é um cargo?
Muitas empresas anunciam vagas de "engenheiro DevOps" e, na prática, costumam querer alguém que construa pipelines, automatize infraestrutura e opere plataformas. Mas DevOps como ideia trata de como desenvolvimento e operações trabalham juntos, não de um time separado que é dono da automação. Um "time DevOps" entre Dev e Ops pode virar um terceiro silo, o oposto da intenção.
Qual é a diferença entre DevOps e Agile?
Os métodos ágeis encurtam o ciclo entre um pedido e um software funcionando, mas a maioria para em um "pronto" que significa "pronto para ser implantado". O DevOps estende o mesmo raciocínio de feedback curto ao deploy, à operação e ao monitoramento, para que "pronto" signifique "rodando em produção e observado". Os dois são complementares; um time Scrum que vai para produção uma vez por trimestre só é ágil no papel.
Preciso de Kubernetes ou da nuvem para fazer DevOps?
Não. As práticas — tudo em controle de versão, builds e testes automatizados, deploys por script, monitoramento e post-mortems sem culpados — funcionam em um par de servidores físicos. Contêineres e APIs de nuvem tornam os ambientes mais baratos de reproduzir e automatizar, o que reduz o custo das práticas, mas adotar as ferramentas sem as práticas entrega muito pouco.
Como medir se o DevOps está funcionando?
Use as quatro métricas DORA: frequência de deploy, lead time para mudanças, taxa de falha de mudanças e tempo de restauração do serviço. Juntas, elas capturam tanto velocidade quanto estabilidade. Os times de elite vão bem nas quatro, o que mostra que velocidade e confiabilidade não são excludentes quando as práticas de engenharia estão estabelecidas.