O que é CI/CD em DevOps?

Integração, entrega e implantação contínuas (CI/CD) são práticas DevOps. Em outras palavras, são técnicas que implementam os ideais do DevOps. Se você não tem familiaridade com o termo, pode estar se perguntando: o que exatamente é DevOps? E o que o DevOps tem a ver com o Desenvolvimento ágil de software? Entender o contexto mais amplo de como as práticas de desenvolvimento de software evoluíram e os problemas que os métodos ágeis e o DevOps tentam resolver pode ajudá-lo a tirar maior proveito do seu processo de CI/CD.

Como os métodos ágeis mudaram o jogo

Graças à revolução digital, software e TI deixaram de ter uma mera função de suporte para muitas organizações (indústrias de software à parte) para se tornarem parte integrante de muitos setores de negócios.

Em toda uma gama de setores, desde bancos e finanças a varejo, e de governos a viagens e entretenimento, o desenvolvimento de software está se tornando uma parte essencial do trabalho de muitas organizações. Produtos e serviços são acessados ​​e mantidos por aplicativos e serviços online, enquanto os sistemas internos de computador são essenciais para o bom funcionamento de uma empresa.

Em 2001, quando essa tendência estava começando a se intensificar, um grupo de desenvolvedores de software elaborou o manifesto ágil. Foi a resposta deles a alguns dos problemas que viram na maneira como o software estava sendo desenvolvido na época. O manifesto fornece um conjunto de valores e princípios para o desenvolvimento de software e deu origem a diversos frameworks – sendo o Scrum um dos mais conhecidos – que os colocam em prática.

Os métodos ágeis reconhecem que o foco deve estar na entrega de software em funcionamento e que as pessoas – que devem se comunicar e colaborar de forma eficaz – são fundamentais para atingir esse objetivo. Desenvolvido em resposta às longas escalas de tempo dos projetos em cascata da época, onde o software era normalmente entregue anos depois que os requisitos foram fechados e quando as necessidades e o contexto do usuário poderiam ter mudado significativamente, a abordagem ágil consiste em aceitar que requisitos podem mudar ao longo do processo.

Frameworks e metodologias ágeis giram em torno do trabalho iterativo, entregando pequenos pedaços de software funcional regularmente, obtendo feedback e adaptando o sistema em resposta ao feedback. Foi um afastamento significativo da abordagem em cascata, onde se trabalhava em fases lineares e distintas de design, desenvolvimento, testes e lançamento.

Entendendo o DevOps

Enquanto equipes de desenvolvimento estavam mudando a maneira como abordavam o desenvolvimento de software ao adotar os princípios ágeis, ainda havia pouca colaboração entre as equipes mais adiante no processo.

Não era incomum para as equipes de operações, aquelas que eram responsáveis ​​por gerenciar a infraestrutura e lidar com a implantação de software em ambiente de produção, trabalhar de uma maneira completamente diferente e se comunicar efetivamente numa linguagem diferente da utilizada pelos desenvolvedores que escreviam o código.

Mesmo que os desenvolvedores trabalhassem de forma mais eficiente dentro de sua equipe, depois que o build era entregue aos responsáveis pelas operações para implantar em ambiente simulado, o processo frequentemente encontrava um gargalo. Dependências ausentes, problemas de configuração do ambiente e bugs que não eram replicados nas máquinas locais dos desenvolvedores faziam com que o build ficasse indo e vindo entre as equipes e criavam divergências sobre qual lado seria responsável por corrigir o problema.

Frequentemente, o processo era combinado com uma estratégia de lançamentos em cascata; embora as alterações tenham sido entregues de forma incremental pelo desenvolvimento, as etapas subsequentes continuavam a agrupar as alterações em lançamentos grandes e pouco frequentes, eliminando assim a oportunidade de feedback rápido dos usuários.

Uma mudança cultural

Combinando “desenvolvimento” e “operações”, o termo “DevOps” enfatiza a necessidade de integrar as atividades de ambas as equipes para entregar software funcional de forma eficiente. Dito isso, o escopo não se limita apenas a essas funções; todos os envolvidos no desenvolvimento e entrega de software precisam se alinhar em torno do objetivo comum de entregar software funcional aos usuários.

Um princípio fundamental do DevOps é a criação de uma cultura de responsabilidade compartilhada, confiança mútua e comunicação aberta. Não é suficiente que as equipes de desenvolvimento marquem o trabalho como concluído, assim que ele funcionar num build local. Para entregar código que está pronto para produção, os desenvolvedores precisam ter visibilidade das etapas entre a parte que fica sob sua responsabilidade e o lançamento. Isto significa que é necessário quebrar silos e colaborar com as equipes de controle de qualidade, segurança e infraestrutura para entender seu papel no processo.

Ferramentas e automação de DevOps

Embora uma cooperação mais estreita entre as equipes possa ser alcançada com processos manuais, é muito mais eficiente usar ferramentas para automatizar o máximo possível o trabalho. A automatização das etapas de construção, teste e implantação permite que o trabalho seja feito mais rapidamente, o que significa que os resultados dessas etapas estarão disponíveis muito mais cedo. A automação é fundamental para uma abordagem de DevOps porque permite ciclos de feedback estreitos que são essenciais para construir qualidade e eliminar o desperdício.

Processos eficientes

O DevOps surgiu num momento em que os princípios da produção enxuta (Lean) estavam começando a ser aplicados ao desenvolvimento de software. O Lean foca na eliminação do desperdício, otimizando cada etapa de um processo, construindo qualidade e respeitando as pessoas.

O DevOps incorpora bastante desse pensamento e busca tornar o desenvolvimento de software mais eficiente, otimizando o processo de ponta a ponta e fornecendo feedback sobre o que está sendo construído o mais cedo possível com ciclos de feedback estreitos.

Isto inclui realizar antes certas atividades que eram posteriores ao desenvolvimento e lidar com os problemas levantados por esse trabalho assim que forem encontrados, sejam eles testes com falha, vulnerabilidades de segurança ou problemas de build.

Como todos compartilham a responsabilidade de entregar o software aos usuários, a velha desculpa de "funciona na minha máquina" não é suficiente. Com uma abordagem DevOps, os desenvolvedores têm muito mais visibilidade de como o software é usado e dos desafios que surgem, o que significa que eles estarão em melhor posição para corrigi-los.

Adotar o DevOps amplia os benefícios dos métodos ágeis para além da equipe de desenvolvimento. Adaptar-se ao ritmo de trabalho dos desenvolvedores e trabalhar em tarefas menores torna mais fácil identificar e isolar problemas, pois haverá menos variáveis ​​em jogo. Da mesma forma, a geração de feedback evita o desperdício de esforço no processo de testar e preparar um build que mais tarde será descartado. Por sua vez, também garante que a organização como um todo obtenha todos os benefícios de trabalhar em incrementos menores.

Colocando DevOps em prática

Construir um pipeline de CI/CD automatizado coloca esses ideais do DevOps em prática.

A prática de integração contínua de fazer commits com frequência encoraja tamanhos de lote pequenos que podem se mover rapidamente pelo pipeline. Um sistema automatizado de build e testes permite verificar cada mudança e fornecer feedback muito mais rapidamente do que um processo manual.

Como desenvolvedor, obter feedback rápido sobre o que você acabou de escrever é muito mais eficiente, pois é menos provável que você tenha perdido o contexto da mudança: você pode manter o que o Lean chama de “fluxo”. Testes automatizados frequentes também ajudam a melhorar a qualidade, já que detectar e corrigir bugs antecipadamente evita que outro código seja construído sobre eles.

Automatizar a implantação em servidores de pré-produção torna o processo consistente e confiável, trazendo oportunidades para utilizar ambientes de simulação para testes e feedback. A implantação de pequenas mudanças na produção regularmente, em vez de agrupá-las em grandes lançamentos pouco frequentes, reduz o risco de algo dar errado em ambientes de produção, pois haverá menos variáveis ​​a serem combinadas em consequências indesejadas.

Se surgir um bug, isolá-lo e corrigi-lo é bem mais rápido, graças ao tamanho menor do lote. O lançamento de atualizações de forma incremental significa que você está entregando valor aos usuários regularmente e pode aproveitar o feedback sobre essas mudanças para informar o que será construído em seguida, assim continuando a evolução do produto.

Conclusão

O objetivo geral do CI/CD e do DevOps é acelerar o processo de entrega de software de valor aos usuários sem comprometer sua qualidade. Os princípios do DevOps se sobrepõem e complementam as ideias ágeis e Lean. Ao observar toda a jornada de desenvolvimento de software e otimizando cada estágio, você poderá entregar mais rapidamente e, portanto, obter feedback mais rápido, permitindo um ciclo contínuo de desenvolvimento e melhoria.