Quem trabalha com desenvolvimento ágil precisa não só adotar a cultura DevOps, como também se acostumar com termos como desenvolvimento contínuo, integração contínua, implementação contínua, entrega contínua, entre outros. Hoje, falaremos mais do último, também conhecido como continuous delivery ou sua sigla em inglês, CD.
Entrega contínua é uma abordagem na qual os times de desenvolvimento lançam produtos de qualidade de forma frequente, previsível e automatizada. Em vez de fazer grandes entregas de uma vez, fazem várias pequenas e rápidas — reduzindo as chances de erros e conquistando maior controle de qualidade.
O uso de automação nos testes, infraestrutura e deploy é uma das principais características da entrega contínua, o que viabiliza que os versionamentos sejam mais velozes.
Entre as vantagens de usar entrega contínua, podemos citar a otimização do trabalho dos desenvolvedores, maior agilidade no lançamento de produtos (time to market) e redução de custos.
No entanto para que a entrega contínua funcione, é importante que sua equipe tenha maturidade suficiente para lidar com o acúmulo de responsabilidades que essa abordagem exige. Além de um bom planejamento inicial, é fundamental que haja participação constante dos responsáveis pelo projeto no processo de validação. Caso contrário, mesmo com as ferramentas necessárias, a equipe não conseguirá lançar novas versões com frequência.
Para garantir a entrega contínua, é necessário fazer com que o código esteja sempre pronto para o deploy, mesmo em times com centenas de desenvolvedores fazendo alterações diárias. Para isso, é necessário eliminar as fases de integração e testes que normalmente pedem “code freeze” e interrompem a produção.
Quais as diferenças entre entrega contínua e integração contínua?
É comum a entrega contínua ser confundida com a integração contínua, também conhecida como continuous integration, ou CI em sua sigla em inglês. E, de fato, ambos os conceitos são próximos, porém têm diferenças fundamentais, como já mostramos aqui.
Na integração contínua, os desenvolvedores integram as suas mudanças ao branch principal sempre que possível. Nessa situação, as mudanças são validadas com builds de testes que rodam de forma automatizada, impedindo problemas na hora de lançar mudanças nas integrações.
Já a entrega contínua é uma extensão, que não só traz um fluxo de automatização contínua para os testes da integração, como também para os deploys e processos de lançamento, permitindo que você atualize sua aplicação com apenas um clique de botão. Desta forma, é possível fazer muito mais mudanças em em ciclos menores, que trazem uma série de benefícios para seu software.
>>Leitura recomendada: Descubra por que adotar frameworks ágeis não é a mesma coisa que ter business agility
Quais são as vantagens da entrega contínua?
Há uma série de estudos que revelam que a entrega contínua, mesmo tornando os times mais competitivos e ágeis, não prejudica a estabilidade e a confiança dos sistemas — pelo contrário, esses times conseguem resultados ainda melhores por conseguirem conquistar os seguintes benefícios:
Menores riscos nos lançamentos
Uma vez que a entrega contínua permite deploys constantes e rápidos, eles se tornam eventos menores e, consequentemente, menos arriscados, podendo ser feitos a qualquer momento de acordo com a demanda — muitas vezes de forma imperceptível aos usuários.
Mais velocidade
Velocidade é importante para qualquer negócio competitivo. E a entrega contínua ajuda muito nesse sentido, uma vez que elimina fases de integração, testes e correção que consomem semanas ou até meses. Com os times trabalhando juntos, na filosofia do DevOps, os processos para homologação de ambiente, testes de regressão e deploy são automatizados. Assim, ganha-se tempo e elimina-se retrabalho.
Mais qualidade
Engana-se quem acredita que mais velocidade significa menos qualidade. No caso da entrega contínua, ambos podem caminhar juntos. Afinal, com os testes automatizados, erros são encontrados rapidamente e os desenvolvedores ficam livres para trabalhar na qualidade final do produto, partindo para camadas mais avançadas de testes, como os exploratórios, de usabilidade, performance e segurança.
Trabalhando com pequenos lançamentos, você também consegue realizar mais melhorias incrementais, respondendo rapidamente aos feedbacks dos clientes e realizando mais testes A/B, além de conseguir testar mais hipóteses de produtos.
Menores custos
Liberando seus desenvolvedores de tarefas repetitivas relacionadas a infraestrutura, testes e deploy, o trabalho da equipe se torna eficiente, e consequentemente reduzindo custos.
Times mais felizes
Com o ciclo de testes se tornando menos repetitivos e os lançamentos menos dolorosos, a tendência é que a equipe fique mais satisfeita — o que é endossado por estudos. Mas, mais do que isso, com mais liberdade e tempo, eles podem se tornar mais proativos e trabalhar em novas ideias para o produto.