fbpx
Quer saber o que é CI/CD e quais as suas aplicabilidades?

Quer saber o que é CI/CD e quais as suas aplicabilidades?

8 passos devopsPowered by Rock Convert

Os desenvolvedores são frequentemente solicitados a criar, testar e implantar softwares de forma confiável e repetível, sem fazer alterações no código do próprio aplicativo.

Para isso, a Continuous Integration (CI) — integração contínua — e a Continuous Delivery (CD) — entrega contínua — incorporam uma cultura, um grupo de princípios operacionais e um conjunto de práticas que permitem que as equipes de desenvolvimento entreguem alterações de código com mais frequência e confiabilidade.

A CI/CD, como é chamada, é uma prática recomendada de metodologias ágeis, pois permite que as equipes de desenvolvimento se concentrem em atender aos requisitos de negócios, qualidade do código e segurança, porque as etapas de implantação são automatizadas. Continue a leitura e entenda mais sobre o que é CI/CD!

O que é a Continuous Integration (CI)?

A CI é uma filosofia de codificação e um conjunto de práticas que levam as equipes de desenvolvimento a implementar pequenas mudanças e fazer check-in de código nos repositórios de controle de versões com uma determinada frequência. Como a maioria dos aplicativos modernos exige o desenvolvimento de código em diferentes plataformas e ferramentas, a equipe precisa de um mecanismo para integrar e validar suas alterações.

O objetivo técnico da CI é estabelecer uma forma consistente e automatizada de criar, empacotar e testar aplicativos. Com a consistência no processo de integração, os desenvolvedores têm mais chances de confirmar alterações de código com mais frequência, o que leva a uma melhor colaboração, qualidade do software e uma equipe de TI de alta performance.

Para você entender melhor, abaixo explicamos os três principais estágios do fluxo de trabalho do CI.

Pressione para ter controle todos os dias

De todos os três estágios da CI, comprometer-se a ter controle é o mais fácil tecnicamente, mas o mais difícil culturalmente. E a razão disso é que a integração diária do código não significa que um desenvolvedor enviará o código para uma fonte de recurso. Na verdade, a prática da CI trata de inserir código na fonte mestra, porque é a que será usada para lançar o software.

Quando você pratica a CI, isso não significa que você não usará mais ramificações. Você ainda vai. A única diferença é que, porque você amplifica o feedback ao integrar o código continuamente, as ramificações se tornam temporárias.

Confie nos testes automatizados

Para validar cada vez que um desenvolvedor integra um novo código, a CI conta com um conjunto de testes automatizado e confiável. Se você precisar compilar o código, o primeiro teste é que ele seja compilado. Em seguida, você pode incluir quantos testes considerar críticos.

E quantos testes devem ser incluídos? Para determinar isso, lembre-se de que o objetivo da CI é fornecer feedback o mais rápido possível. Se um desenvolvedor precisar esperar uma hora para obter feedback, ele não funcionará.

Por fim, o conjunto de testes deve poder dizer que algo está corrompido — testes devem ser confiáveis. Você sempre vai sentir falta das coisas, mas quando você detectar um bug na produção, crie um caso de teste e inclua-o no loop da CI.

Priorize a correção de uma construção corrompida

Quando a construção é interrompida, corrigi-la deve ser a prioridade da equipe. E a importância disso deve ser uma mentalidade compartilhada na cultura.

Quem quebrar a compilação tentará corrigir o problema e, se precisar de ajuda, o resto da equipe estará lá. No software, se a compilação não puder ser corrigida em minutos, a equipe deve decidir se removerá o código ou desativará o sinalizador de recurso.

A ideia por trás da correção de uma compilação quebrada é que a compilação sempre produzirá código funcional que pode ser liberado.

Quais são os benefícios?

O principal objetivo da integração contínua é fornecer feedback rápido para que, se um defeito for introduzido na base de código, ele possa ser identificado e corrigido o mais rápido possível. Mas os benefícios que ela pode oferecer vão muito além, como os que descreveremos a seguir. Acompanhe.

Mitigação de Riscos

Provavelmente, todos nós estivemos envolvidos no cenário “funcionou na minha máquina local”. Como os ambientes de desenvolvimento local geralmente diferem de onde o site realmente será executado na internet, podem existir várias coisas diferentes entre o ambiente local e o local em que você avança para a produção. A integração contínua permite reduzir os riscos não apenas nos testes, mas também permitindo a paridade de produção.

As tarefas de garantia de qualidade (QA) — como teste do navegador — também podem ser automatizadas, atenuando o risco de um bug, chegando até o site ativo.

Confiança

Se você possui um conjunto de testes robusto e todos os testes passam, sua confiança em não enviar um bug aumenta muito. Se você é transparente com seu processo e educa o restante de sua equipe e clientes, a confiança deles em você como equipe de desenvolvimento também melhora.

Comunicação da equipe

A integração está no nome por uma razão! A integração contínua abre as portas para a integração de outras ferramentas e serviços que sua equipe usa no fluxo de trabalho de desenvolvimento.

Crie um canal para cada projeto e a CI poderá enviar uma mensagem quando ocorrerem eventos significativos, como uma implantação. Um participante do projeto, como um gerente, terá mais facilidade se tudo o que eles precisarem fazer é verificar esse canal em vez de procurar um desenvolvedor para ver o que é enviado.

Despesas gerais reduzidas

As horas de desenvolvimento são normalmente horas faturáveis, mas e quanto ao tempo gasto na implantação manual de códigos ou arquivos? A automação de grandes partes do seu fluxo liberará tempo para o trabalho faturável, algo que todos podem apreciar.

O teste automatizado também permite que você falhe mais cedo, em vez de encontrar erros no controle de qualidade ou na produção — ou pior, o cliente os encontra. Mais bugs corrigidos no mesmo período de tempo é uma vitória clara.

Os novos desenvolvedores da equipe também podem começar a funcionar mais rapidamente, pois não precisam aprender todas as etapas envolvidas pelas quais a CI agora é responsável.

Quais cuidados tomar?

Por outro lado, existem alguns desafios implícitos ao adotar a metodologia, como os seguintes:

  • sua equipe precisará escrever testes automatizados para cada novo recurso, aprimoramento ou correção de bug;
  • você precisa de um servidor de integração contínua que possa monitorar o repositório principal e executar os testes automaticamente para cada nova confirmação enviada;
  • os desenvolvedores precisam mesclar suas alterações o mais rápido possível, pelo menos uma vez por dia.

A CI é um processo complexo e erros podem acontecer onde você menos espera. Abaixo estão alguns exemplos a serem observados ao implementar esta prática:

  • não corrigir construções quebradas antes de adicionar mais código;
  • ter estruturas complexas de ramificação que podem ser difíceis de classificar para encontrar o link necessário;
  • usar “hotfixes” para liberar ramificações;
  • encerrar testes com falha sem primeiro determinar a causa e o local da falha;
  • não testar continuamente o código assim que é inserido no repositório compartilhado;
  • fazer testes manuais e compilações manuais, o que limitará seriamente o número de bugs detectados;
  • não escrever testes significativos que possam ser executados em todas as construções para saber se alguma coisa do novo código afetou as construções anteriores.

Quais as principais aplicabilidades?

Com a CI, os desenvolvedores frequentemente integram seu código na ramificação principal de um repositório comum. Em vez de criar recursos isoladamente e enviar cada um deles no final do ciclo, um desenvolvedor se esforça para contribuir com produtos de trabalho de software para o repositório várias vezes em um determinado dia.

A grande ideia aqui é reduzir os custos de integração fazendo com que os desenvolvedores o façam mais cedo e com mais frequência. Na prática, um desenvolvedor frequentemente descobre conflitos de fronteira entre código novo e existente no momento da integração. Se for feito cedo e com frequência, a expectativa é que essas resoluções de conflitos sejam mais fáceis e menos dispendiosas.

Obviamente, existem trocas. Essa alteração de processo não fornece garantias adicionais de qualidade. De fato, muitas organizações acham que essa integração se torna mais cara, pois dependem de procedimentos manuais para garantir que o novo código não vai introduzir novos bugs e nem quebrar o código existente.

Para reduzir o atrito durante as tarefas, a integração contínua depende de suítes de testes e de uma execução automatizada. É importante, no entanto, perceber que o teste automatizado é bem diferente do teste contínuo.

O objetivo da CI é refinar a integração em uma tarefa de desenvolvimento diária simples e de fácil repetição, que servirá para reduzir os custos gerais de construção e revelar defeitos no início do ciclo. O sucesso dependerá de mudanças na cultura da equipe de desenvolvimento, para que haja incentivo à prontidão, a construções frequentes e iterativas e à vontade de lidar com os bugs quando eles são encontrados muito antes.

Guia Rápido DevOpsPowered by Rock Convert
automatizacao deployPowered by Rock Convert

O que é a Continuous Delivery (CD)?

A CD começa onde termina a CI. Ela automatiza a entrega de aplicativos para ambientes de infraestrutura selecionados. A maioria das equipes trabalha com vários ambientes diferentes da produção, como ambientes de desenvolvimento e teste. Já a CD garante que haja uma maneira automatizada de enviar alterações de código a eles.

Em teoria, com entrega contínua, você pode decidir liberar diariamente, semanalmente, quinzenalmente ou o que for mais adequado aos seus requisitos de negócios. No entanto, se você realmente deseja obter os benefícios da entrega contínua, implante isso na produção o mais cedo possível para garantir a liberação de pequenos lotes que sejam fáceis de solucionar em caso de problema.

A seguir, serão apresentados os princípios vitais para a entrega contínua. Quando você os coloca em prática, eles o ajudam a fornecer software com segurança e rapidez de forma sustentável, conforme definição da CD que incluímos acima.

Pequenas implantações frequentes

Como diz o ditado, “se dói, faça-o com mais frequência”. Geralmente, sempre que uma implantação acontece, a estabilidade do aplicativo está em risco. Portanto, tendemos a distanciar implantações umas das outras — o problema com essa abordagem é que acabamos acumulando muitas mudanças. As chances são de que uma dessas mudanças possa ter problemas, forçando-nos a reverter as outras que estavam funcionando.

O que a CD promove — com a combinação com a CI, o que implica em qualidade — é que devemos trabalhar em pequenos lotes. Quando você precisar fazer uma alteração significativa no produto, use sinalizadores de recursos como o Facebook antes de lançar o Messenger. Ou aplique o padrão Strangler e divida as alterações complicadas em pequenas e simples. Se você fizer implantações com mais frequência e trabalhar em pequenos lotes, o risco de fazer implantações será menor.

Automação com um toque humano

Na Toyota, Jidoka ou “automação com um toque humano” é a filosofia usada para automação. Todo trabalho manual repetido que humanos realizam o tempo todo em todas as implantações deve ser automatizado. Seres humanos que seguem uma receita pela memória ou leem um manual de instruções falham quando estão sob pressão. Por outro lado, as máquinas são candidatas perfeitas para tarefas repetitivas.

A automação é um princípio crítico na CD, porque ajuda a aumentar a sustentabilidade do processo. Seja cauteloso, no entanto. Depois de introduzir a automação, você ainda precisa da mente das pessoas para melhorar o processo. Você pode obter automação com a ajuda de práticas, como infraestrutura como código, pipeline como código ou gerenciamento de configuração. A CD ajudará a produzir implantações com um clique que podem ser acionadas sob demanda.

Sempre melhorando

Se você não mede, não pode melhorar. Além disso, se você tentar implementar tudo o que leu neste artigo, ficará impressionado. Se você sabe que existem muitas oportunidades de melhoria, comece com coisas simples.

No momento, você está compilando o aplicativo na máquina de um desenvolvedor? Comece usando um servidor dedicado para CI e construa o aplicativo em um servidor diferente. Você está copiando e colando manualmente artefatos de aplicativo? Comece automatizando o processo de copiar/colar. Não importa se você adicionou pequenas melhorias ou se está satisfeito com a evolução do processo. Sempre haverá algo para melhorar. A CD não tem uma data final.

Modelo de responsabilidade compartilhada

A CD produz equipes mais felizes, porque agora o pipeline de implantação não é apenas um problema de operações. As operações buscarão maneiras de ajudar os desenvolvedores a criar software com qualidade. E eles farão isso não apenas treinando, mas também fornecendo todas as ferramentas necessárias que um desenvolvedor pode precisar para entender melhor os problemas.

Uma equipe não otimiza o processo apenas para eles, mas adiciona melhorias que ajudam a organização a agregar mais valor aos clientes. Isso, em vez da abordagem tradicional de recompensar os desenvolvedores pela rapidez com que eles são enviados, ou de operações recompensadoras pela confiabilidade do sistema. Se é isso que você está fazendo, essas duas equipes terão objetivos diferentes, e isso não funcionará.

Todos na equipe são responsáveis por criar continuamente um pipeline de entrega mais seguro, rápido e determinístico.

Quais são os benefícios?

Quando bem executada, a CD permite que uma organização responda mais rapidamente ao seu mercado e aos clientes, internos e externos. Também torna a vida mais saudável para as pessoas nas equipes de operações de TI, desenvolvimento de software e testes de qualidade. Apresentamos outros benefícios a seguir. Veja.

Entregue software com menos bugs e menor risco

Ao liberar alterações menores com mais frequência, você detecta erros muito antes no processo de desenvolvimento. Quando você implementa testes automatizados em todas as etapas do desenvolvimento, não corre o risco de passar o código com falha para a próxima etapa — e é mais fácil reverter alterações menores quando você precisar.

Libere novos recursos para comercializar com mais frequência — e aprenda

A liberação de novos recursos antecipadamente e com frequência — mesmo em um estado minimamente viável — significa que você recebe feedback mais frequente, oferecendo a capacidade de iterar e aprender com seus clientes. Alistar clientes como parceiros de desenvolvimento lhes dá uma sensação de copropriedade e lealdade, além de aumentar a probabilidade de perdoar quando você tropeça.

Responda às condições de marketing mais rapidamente

As condições do mercado mudam constantemente. Se você acabou de descobrir que um novo produto está perdendo dinheiro ou que mais clientes acessam seu site a partir de smartphones do que laptops, é muito mais fácil fazer uma alteração rápida se você já pratica a entrega contínua.

Quais cuidados tomar?

Assim como na CI, ao adotar a CD é preciso ter alguns cuidados, como:

  • você precisa de uma base sólida em integração contínua e seu conjunto de testes precisa cobrir o suficiente da sua base de código;
  • as implantações precisam ser automatizadas — o gatilho ainda é manual, mas, uma vez iniciada a implantação, não há necessidade de intervenção humana;
  • provavelmente sua equipe precisará adotar sinalizadores para que recursos incompletos não afetem os clientes na produção.

Quais as principais aplicabilidades?

A CD cobre a próxima fase no desenvolvimento de aplicativos — liberando as alterações. Ela garante que o código possa ser implementado de maneira rápida e segura na produção, entregando todas as alterações em um ambiente de preparação, garantindo que os aplicativos e serviços de negócios funcionem conforme o esperado por meio de rigorosos testes automatizados.

Como todas as alterações são entregues em um ambiente de armazenamento temporário usando automação completa, os desenvolvedores podem ter certeza de que o aplicativo será implantado na produção com o pressionar de um botão sempre que a empresa estiver pronta.

O valor da entrega contínua está no fato de o código estar pronto para implantar o tempo todo: o controle de qualidade testa automaticamente cada compilação em cada ambiente e, se for aprovado, o código estará pronto para ser implantado. A implementação da entrega contínua aumenta efetivamente a qualidade e a velocidade e torna a equipe mais eficiente.

Qual a relação entre CI/CD e metodologia ágil?

Por que a cultura ágil é tão importante nesse contexto? Ela é o elemento humano da CI/CD. Dimensionar o trabalho, criar histórias do usuário mapeadas diretamente para o valor, dividir as histórias em tarefas consumíveis, estimar o que pode ser feito em um período fixo, realizar demonstrações e retrospectivas significativas: todos esses esforços são semelhantes a um pipeline de implantação de código.

Se qualquer parte dela quebrar, a velocidade vai sofrer, as implantações vão atrasar e a qualidade será afetada. A maioria das empresas de software que desejam obter uma vantagem competitiva está usando hoje as práticas de CI/CD para ajudar a melhorar seu pipeline de DevOps. Como resultado, a CI/CD é um dos segmentos que mais crescem no mercado de ferramentas DevOps de 15 bilhões de dólares.

Os pipelines de CI/CD promovem o desenvolvimento de software ágil e inovador, além de promover uma maior colaboração entre as equipes de desenvolvimento e operações. Para fornecer software de melhor qualidade com mais frequência e confiabilidade, um pipeline de CI/CD é uma das melhores práticas que sua equipe de DevOps pode adotar.

A cultura ágil e as práticas CI/CD estão ficando cada vez mais perto de se tornarem um método único, de alta qualidade e previsível para desenvolver — vide programação pareada — e lançar um software. Existem elementos humanos e tecnológicos a serem resolvidos para que cada um trabalhe em harmonia, mas o esforço vale a pena.

Testar é a chave para alcançar a entrega contínua e, quando você pode implantar com confiança ao pressionar um botão — você terá muito mais tempo para inovar e perderá menos tempo com as ineficiências dos métodos antigos.

Como escolher as melhores ferramentas de CI/CD?

O mercado está repleto de diferentes tipos de ferramentas de CI/CD que os desenvolvedores podem usar para criar e executar um pipeline, adicionar melhor segurança e implantar códigos. Embora não exista um tamanho único para as ferramentas de CI/CD, identificar um que atenda às necessidades específicas de negócios se resume a alguns requisitos importantes. Veja.

Hospedagem

A implantação local oferece às organizações o controle total de seus ambientes. No entanto, as empresas precisam comprar, operar e manter a infraestrutura. Os provedores de CI/CD baseados em nuvem gerenciam a infraestrutura da equipe. Porém, eles estão limitados às ofertas do provedor de nuvem e a empresa pode ter dificuldade em mover serviços entre os provedores.

Recursos

As ferramentas de CI/CD devem permitir que os desenvolvedores construam, testem e implantem sem problemas. Existem alguns recursos principais que a empresa deve procurar, como boa interface do usuário, facilidades de configuração — incluindo integração com provedores de nuvem — capacidade de expansão, pipeline como código, monitoramento e muito mais.

Segurança

Considere a segurança que acompanha uma ferramenta de CI/CD à medida que se integram às configurações ou ambientes existentes. A CI/CD exige que todas as ferramentas de teste de segurança sejam chamadas programaticamente e seus resultados agregados em um único local. Busque por ferramentas que contem com APIs para auditorias de criptografia automatizadas.

Concluindo, agora que você entende o que é CI/CD, é importante saber que existem muitas ferramentas que podem ajudar a permitir uma transição mais suave para esse processo. O teste é uma grande parte dele, porque, mesmo que você consiga tornar suas integrações e entregas mais rápidas, isso não significaria nada se tudo fosse feito sem a qualidade em mente. Além disso, quanto mais etapas do pipeline puderem ser automatizadas, melhores serão as versões.

Achou este guia relevante para a sua atuação profissional? Quer ter acesso a outros materiais parecidos? Então siga a gente nas redes sociais. Estamos no Facebook, no Twitter, no YouTube e no LinkedIn.

guia de ferramentas devopsPowered by Rock Convert
consultoriaPowered by Rock Convert

Deixe um comentário