{"id":1646,"date":"2024-10-01T06:37:00","date_gmt":"2024-10-01T09:37:00","guid":{"rendered":"https:\/\/www.erudio.com.br\/blog\/?p=1646"},"modified":"2024-10-01T18:49:33","modified_gmt":"2024-10-01T21:49:33","slug":"a-transicao-de-releases-mensais-para-continuous-deployment","status":"publish","type":"post","link":"https:\/\/www.erudio.com.br\/blog\/a-transicao-de-releases-mensais-para-continuous-deployment\/","title":{"rendered":"A transi\u00e7\u00e3o de releases mensais para Continuous Deployment"},"content":{"rendered":"\n<h3>Introdu\u00e7\u00e3o<\/h3>\n\n\n\n<p><\/p>\n\n\n\n<p>A transi\u00e7\u00e3o para Continuous Deployment (CD) \u00e9 uma jornada que pode parecer desafiadora \u00e0 primeira vista, mas os benef\u00edcios para a sua organiza\u00e7\u00e3o s\u00e3o incontest\u00e1veis. Se voc\u00ea est\u00e1 acostumado a ciclos de lan\u00e7amento prolongados, como mensal, semestral ou at\u00e9 anual, a ado\u00e7\u00e3o do CD pode transformar completamente o modo como voc\u00ea entrega software. Ao automatizar todo o processo de deploy, desde a integra\u00e7\u00e3o cont\u00ednua at\u00e9 a entrega cont\u00ednua, \u00e9 poss\u00edvel alcan\u00e7ar um fluxo de trabalho mais eficiente, \u00e1gil e, acima de tudo, confi\u00e1vel. Neste guia, voc\u00ea ver\u00e1 como realizar essa transi\u00e7\u00e3o, quais passos seguir e como o Continuous Deployment pode impactar positivamente a sua equipe, permitindo lan\u00e7amentos mais frequentes, reduzindo o tempo de ciclo e aumentando a confian\u00e7a no processo de deploy automatizado.<\/p>\n\n\n\n<h3><strong>Transi\u00e7\u00e3o de Releases Mensais para Continuous Deployment<\/strong><\/h3>\n\n\n\n<p>Se voc\u00ea est\u00e1 lendo isso, provavelmente est\u00e1 pensando em fazer a transi\u00e7\u00e3o para <strong>Continuous Deployment (CD)<\/strong>. Ou talvez voc\u00ea j\u00e1 tenha feito a transi\u00e7\u00e3o, mas ainda n\u00e3o sinta que est\u00e1 utilizando todo o potencial do seu <strong>pipeline de CD<\/strong>.<\/p>\n\n\n\n<p>Fazer a transi\u00e7\u00e3o de <em>releases<\/em> mensais (ou semestrais\u2026 ou anuais \ud83d\ude35\u200d\ud83d\udcab) para <strong>Continuous Deployment<\/strong> \u00e9 uma mudan\u00e7a recompensadora que trar\u00e1 benef\u00edcios para toda a sua organiza\u00e7\u00e3o. Mas, como em qualquer novo processo de desenvolvimento de software que voc\u00ea adota, h\u00e1 passos concretos que voc\u00ea precisar\u00e1 seguir para alcan\u00e7ar um <strong>pipeline de CD<\/strong> totalmente funcional.<\/p>\n\n\n\n<p>Vamos gui\u00e1-lo por essas etapas para que sua equipe possa adotar o <strong>CD<\/strong>, independentemente da frequ\u00eancia com que voc\u00ea faz <strong>deploy<\/strong> de c\u00f3digo atualmente. Em seguida, explicaremos como essa mudan\u00e7a pode trazer benef\u00edcios tang\u00edveis para sua equipe ao fazer a transi\u00e7\u00e3o para o <strong>Continuous Deployment<\/strong> e alcan\u00e7ar um fluxo de trabalho mais eficiente e \u00e1gil.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.erudio.com.br\/blog\/wp-content\/uploads\/2024\/09\/senior-developer-vs-lead-developer-1128x635-1-1024x576.jpg\" alt=\"\" class=\"wp-image-1679\" width=\"768\" height=\"432\" srcset=\"https:\/\/www.erudio.com.br\/blog\/wp-content\/uploads\/2024\/09\/senior-developer-vs-lead-developer-1128x635-1-1024x576.jpg 1024w, https:\/\/www.erudio.com.br\/blog\/wp-content\/uploads\/2024\/09\/senior-developer-vs-lead-developer-1128x635-1-300x169.jpg 300w, https:\/\/www.erudio.com.br\/blog\/wp-content\/uploads\/2024\/09\/senior-developer-vs-lead-developer-1128x635-1-768x432.jpg 768w, https:\/\/www.erudio.com.br\/blog\/wp-content\/uploads\/2024\/09\/senior-developer-vs-lead-developer-1128x635-1.jpg 1128w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/><\/figure>\n\n\n\n<h3><strong>O que \u00e9 Continuous Deployment?<\/strong><\/h3>\n\n\n\n<p>Antes de entrarmos em como alcan\u00e7ar o <strong><em>Continuous Deployment<\/em><\/strong>, precisamos entender o que \u00e9 <strong><em>Continuous Deployment<\/em><\/strong> e onde ele se encaixa em todo o fluxo de trabalho de <strong><em>Continuous Integration<\/em>\/<em>Continuous Delivery<\/em>\/<em>Continuous Deployment<\/em><\/strong>.<\/p>\n\n\n\n<p>Todos os pipelines de <strong><em>CI\/CD<\/em><\/strong> come\u00e7am com <strong><em>Continuous Integration (CI)<\/em><\/strong>. <strong><em>CI<\/em><\/strong> \u00e9 o processo de construir, verificar e executar testes automatizados que o seu c\u00f3digo precisa passar para ser mesclado \u00e0 branch principal.<\/p>\n\n\n\n<p>A partir da\u00ed, passamos para <strong><em>Continuous Delivery<\/em><\/strong>, que \u00e9 o processo de garantir que o c\u00f3digo na branch principal esteja sempre em um estado implant\u00e1vel para que voc\u00ea possa fazer <strong><em>deploy<\/em><\/strong> quando quiser. O c\u00f3digo \u00e9 automaticamente enviado para um ambiente de testes nesta etapa, mas n\u00e3o \u00e9 implantado para os usu\u00e1rios finais at\u00e9 que voc\u00ea aperte manualmente o bot\u00e3o de &#8220;deploy&#8221;.<\/p>\n\n\n\n<p>O passo final \u00e9 o <strong><em>Continuous Deployment<\/em><\/strong>. <strong><em>Continuous Deployment<\/em><\/strong> \u00e9 o processo de implantar automaticamente o c\u00f3digo para os seus usu\u00e1rios finais se ele tiver passado por todos os testes e etapas at\u00e9 a produ\u00e7\u00e3o. Quando falamos sobre transi\u00e7\u00e3o para CD neste artigo, estamos falando de <strong><em>Continuous Deployment<\/em><\/strong>. Este \u00e9 o objetivo final para a maioria das organiza\u00e7\u00f5es que desejam lan\u00e7ar c\u00f3digo v\u00e1rias vezes ao dia.<\/p>\n\n\n\n<p>Pense no <strong>CI\/CD<\/strong> como o processo de eliminar a cerim\u00f4nia de <em>release<\/em> de c\u00f3digo. Os dias de grandes <em>releases<\/em> no final do m\u00eas, com uma quantidade massiva de mudan\u00e7as, ficaram para tr\u00e1s. Com <strong>CD<\/strong>, <em>releases<\/em> pequenos e <strong>deploys<\/strong> acontecem com tanta frequ\u00eancia (idealmente v\u00e1rias vezes ao dia) que se tornam parte do tecido da sua empresa.<\/p>\n\n\n\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_ci_cd_java_aws\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Java Continuous Integration e Continuous Delivery com AWS e Github Actions\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/27_CICD_JavaAWS.png\">\n<\/a>\n\n\n\n<h3><strong>Como Alcan\u00e7ar o Continuous Deployment<\/strong><\/h3>\n\n\n\n<h4><strong>Fa\u00e7a uma transi\u00e7\u00e3o gradual<\/strong><\/h4>\n\n\n\n<p>Ao conversar com l\u00edderes de engenharia, a maioria concorda que a transi\u00e7\u00e3o para <strong>CI\/CD<\/strong> deve ser gradual. (Portanto, n\u00e3o espere implantar continuamente 3 novas funcionalidades no segundo dia de ado\u00e7\u00e3o do <strong><em>CI\/CD<\/em><\/strong> \u2014 isso vai acabar muito, muito mal.)<\/p>\n\n\n\n<p>\u00c9 recomend\u00e1vel come\u00e7ar com mudan\u00e7as menores e pequenos blocos de trabalho. Em vez de tentar passar de realizar <strong>releases<\/strong> tr\u00eas vezes por ano para v\u00e1rias vezes por dia, defina uma meta para realizar <strong>releases<\/strong> a cada duas semanas, depois semanalmente, depois diariamente, e, eventualmente, voc\u00ea estar\u00e1 fazendo <strong>releases<\/strong> v\u00e1rias vezes ao dia.<\/p>\n\n\n\n<h4><strong>Almeje o Continuous Delivery primeiro, depois mova-se para o Continuous Deployment<\/strong><\/h4>\n\n\n\n<p>Nossa outra sugest\u00e3o \u00e9 se aproximar primeiro do <strong><em>Continuous Delivery<\/em><\/strong> antes de chegar ao <strong><em>Continuous Deployment<\/em><\/strong>. Claro, <strong><em>Continuous Deployment<\/em><\/strong> \u00e9 o objetivo final, mas o <strong><em>Continuous Delivery<\/em><\/strong> \u00e9 um pouco mais f\u00e1cil de estabelecer (e precisa estar bem estabelecido para que o <strong><em>Continuous Deployment<\/em><\/strong> aconte\u00e7a, de qualquer forma).<\/p>\n\n\n\n<p>Lembre-se de que o <strong><em>Continuous Delivery<\/em><\/strong> \u00e9 o processo de garantir que seu c\u00f3digo na branch principal esteja sempre em um estado de implanta\u00e7\u00e3o \u2014 ou seja, voc\u00ea pode fazer <strong><em>deploy<\/em><\/strong> quando quiser, mas ele n\u00e3o ser\u00e1 automaticamente implantado. A partir daqui, voc\u00ea ainda ter\u00e1 que apertar manualmente &#8220;deploy&#8221; para liberar o c\u00f3digo para os usu\u00e1rios finais. Recomendamos almejar o <strong><em>Continuous Delivery<\/em><\/strong> antes do <strong><em>Continuous Deployment<\/em><\/strong> por algumas raz\u00f5es.<\/p>\n\n\n\n<p>Primeiro, passar direto para o <strong><em>Continuous Deployment<\/em><\/strong> \u00e9 um grande salto para equipes acostumadas a <strong><em>releases<\/em><\/strong> manuais e a revisar manualmente seu c\u00f3digo antes de ser lan\u00e7ado para os usu\u00e1rios. O <strong><em>Continuous Delivery<\/em><\/strong> \u00e9 uma adapta\u00e7\u00e3o mais f\u00e1cil, pois permite que voc\u00ea verifique tudo antes de ser liberado para seus usu\u00e1rios finais.<\/p>\n\n\n\n<p>Al\u00e9m disso, tornar-se confort\u00e1vel com o <strong><em>Continuous Delivery<\/em><\/strong> antes do <strong><em>Continuous Deployment<\/em><\/strong> d\u00e1 a chance de validar e confiar em seus testes. Quando voc\u00ea configura o <strong><em>Continuous Deployment<\/em><\/strong>, seus usu\u00e1rios finais veem todo e qualquer c\u00f3digo que tenha passado pelos seus testes, ent\u00e3o voc\u00ea precisa ter certeza de que seus testes s\u00e3o s\u00f3lidos (ou seja, que eles n\u00e3o est\u00e3o deixando passar c\u00f3digo com bugs e\/ou que os bugs que passam n\u00e3o s\u00e3o cr\u00edticos).<\/p>\n\n\n\n<p>Com o <strong><em>Continuous Delivery<\/em><\/strong>, voc\u00ea tem a chance de ver como o seu c\u00f3digo est\u00e1 funcionando e valid\u00e1-lo manualmente depois de ter sido testado. Se voc\u00ea notar muitos erros e bugs no seu c\u00f3digo no ambiente de produ\u00e7\u00e3o, isso provavelmente significa que algo est\u00e1 errado com seus testes. Assim, come\u00e7ar com <strong><em>Continuous Delivery<\/em><\/strong> lhe d\u00e1 a chance de validar e garantir que seus testes est\u00e3o realmente cumprindo seu papel e n\u00e3o deixando passar c\u00f3digo com bugs antes de voc\u00ea avan\u00e7ar para o <strong><em>Continuous Deployment<\/em><\/strong>.<\/p>\n\n\n\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_ci_cd_java_azure\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Java Continuous Integration e Continuous Delivery com Microsoft Azure e Github Actions\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/28_CICD_JavaAzure.png\">\n<\/a>\n\n\n\n<h4><strong>Comece com mudan\u00e7as simples e de baixo risco<\/strong><\/h4>\n\n\n\n<p>Nosso \u00faltimo conselho \u00e9 come\u00e7ar com mudan\u00e7as simples e atualiza\u00e7\u00f5es de baixo risco ao se ajustar ao <strong><em>CI\/CD<\/em><\/strong>. Admitidamente, ajustar-se ao <strong><em>CI\/CD<\/em><\/strong> leva tempo, confian\u00e7a e ades\u00e3o de toda a sua organiza\u00e7\u00e3o. Automatizar seus testes e <strong><em>deploys<\/em><\/strong> pode parecer assustador no in\u00edcio \u2014 especialmente para aqueles respons\u00e1veis por construir os testes. Come\u00e7ar com pequenas mudan\u00e7as de c\u00f3digo e atualiza\u00e7\u00f5es de baixo risco permite que sua equipe se ajuste ao processo e ganhe confian\u00e7a nele antes de passar para <strong><em>releases<\/em><\/strong> de funcionalidades maiores.<\/p>\n\n\n\n<p>Uma vez que voc\u00ea se sinta confort\u00e1vel com <strong><em>Continuous Integration<\/em><\/strong> e <strong><em>Continuous Delivery<\/em><\/strong>, o <strong><em>Continuous Deployment<\/em><\/strong> o aguarda. Aqui est\u00e3o alguns passos pr\u00e1ticos que voc\u00ea pode seguir para configurar um pipeline de <strong><em>CI\/CD<\/em><\/strong> adequado (mesmo nas bases de c\u00f3digo mais antigas e complexas):<\/p>\n\n\n\n<h4><strong>Passo 1: Configure seu pipeline<\/strong><\/h4>\n\n\n\n<p>O primeiro passo \u00f3bvio \u00e9 configurar um pipeline de <strong><em>CI<\/em><\/strong>. Isso requer a constru\u00e7\u00e3o de seus testes e a configura\u00e7\u00e3o de um pipeline que garante que seu c\u00f3digo pode ser mesclado uma vez que tenha passado por esses testes.<\/p>\n\n\n\n<h4><strong>Passo 2: Testes<\/strong><\/h4>\n\n\n\n<p>O segundo passo \u00e9 ter um conjunto de testes (que voc\u00ea confie!) em vigor.<\/p>\n\n\n\n<p>Uma vez que seu c\u00f3digo passe por esses testes automatizados com CD, ele ser\u00e1 liberado. Portanto, voc\u00ea precisa garantir que seus testes sejam confi\u00e1veis o suficiente para que voc\u00ea n\u00e3o precise revisar manualmente seu c\u00f3digo depois, porque voc\u00ea n\u00e3o apertar\u00e1 manualmente &#8220;deploy&#8221; uma vez que seu c\u00f3digo passe por eles.<\/p>\n\n\n\n<p>No in\u00edcio, seus testes n\u00e3o precisam ser extremamente complexos, pois o <strong>CD<\/strong> n\u00e3o ser\u00e1 usado para mudan\u00e7as complexas de imediato. O foco deve estar em testes de ponta a ponta que, no m\u00ednimo, confirmem que o site ou plataforma funciona conforme o esperado pela equipe. Por exemplo, esses testes b\u00e1sicos de ponta a ponta garantiriam que os usu\u00e1rios possam acessar, fazer login e realizar a\u00e7\u00f5es essenciais dentro da plataforma.<\/p>\n\n\n\n<p>Eventualmente \u2014 quando voc\u00ea tiver um pipeline de <strong><em>CI\/CD<\/em><\/strong> totalmente desenvolvido e estiver usando-o para quase todos os <strong><em>deploys<\/em><\/strong>, independentemente do tamanho e impacto \u2014 voc\u00ea vai querer ter testes mais complexos e abrangentes. Mas para o prop\u00f3sito de hoje de apenas come\u00e7ar com <strong><em>CI\/CD<\/em><\/strong>, testes b\u00e1sicos s\u00e3o tudo o que voc\u00ea precisa.<\/p>\n\n\n\n<h4><strong>Passo 3: Configure <em>logging<\/em> centralizado ou gerenciamento de erros<\/strong><\/h4>\n\n\n\n<p>Isso garante que, quando um erro acontecer (ou seja, quando um c\u00f3digo com bugs passar por todos os seus testes automatizados e for liberado para seus usu\u00e1rios finais), voc\u00ea seja capaz de rastrear de onde ele veio e corrigi-lo rapidamente. N\u00e3o estamos de forma alguma sugerindo isso para criar uma cultura de culpa. \u00c9 simplesmente um passo necess\u00e1rio quando voc\u00ea est\u00e1 automatizando grande parte do seu processo de teste e <strong><em>deploy<\/em><\/strong>.<\/p>\n\n\n\n<p>Al\u00e9m disso, a boa not\u00edcia sobre <strong><em>CI\/CD<\/em><\/strong> \u00e9 que voc\u00ea est\u00e1 implantando mudan\u00e7as de c\u00f3digo menores e incrementais v\u00e1rias vezes ao dia, em vez de grandes mudan\u00e7as de c\u00f3digo com um impacto massivo de mudan\u00e7as uma vez por m\u00eas. Assim, usar uma plataforma de gerenciamento de erros com <strong><em>CI\/CD<\/em><\/strong> \u00e9 um processo muito mais simples, j\u00e1 que as <strong><em>releases<\/em><\/strong> s\u00e3o t\u00e3o pequenas que \u00e9 mais f\u00e1cil encontrar exatamente onde est\u00e1 o problema.<\/p>\n\n\n\n<h4><strong>Passo 4: Use <em>feature flags<\/em><\/strong><\/h4>\n\n\n\n<p>J\u00e1 mencionamos que a transi\u00e7\u00e3o para <strong><em>Continuous Deployment<\/em><\/strong> pode ser um grande ajuste para equipes acostumadas a revisar manualmente cada detalhe.<\/p>\n\n\n\n<p>Automatizar o processo de testes e <em>deploys<\/em> acelera tudo, eliminando a necessidade de interven\u00e7\u00e3o humana, o que permite que seus desenvolvedores passem mais tempo codificando. No entanto, abrir m\u00e3o dessa interven\u00e7\u00e3o manual pode ser assustador. Usar <strong><em>feature flags<\/em><\/strong> junto com o <strong><em>CI\/CD<\/em><\/strong> \u00e9 como adicionar uma camada extra de seguran\u00e7a, uma rede de prote\u00e7\u00e3o que aumenta a confian\u00e7a da equipe nos <em>deploys<\/em> autom\u00e1ticos.<\/p>\n\n\n\n<p>As <strong><em>feature flags<\/em><\/strong> permitem que os desenvolvedores ativem ou desativem funcionalidades sem a necessidade de fazer um novo <em>deploy<\/em> do c\u00f3digo. Elas funcionam como uma rede de seguran\u00e7a para qualquer equipe de desenvolvimento que utiliza <strong><em>CI\/CD<\/em><\/strong>, j\u00e1 que facilitam o processo de desativar uma funcionalidade que n\u00e3o est\u00e1 se comportando corretamente. Assim, caso um c\u00f3digo com defeito passe pelos testes automatizados e chegue \u00e0s m\u00e3os dos seus usu\u00e1rios, voc\u00ea pode simplesmente desligar a funcionalidade e seus usu\u00e1rios voltar\u00e3o a utilizar a funcionalidade anterior \u2014 tudo isso sem a necessidade de fazer um novo <em>deploy<\/em> ou atualizar a aplica\u00e7\u00e3o.<\/p>\n\n\n\n<h4><strong>Implementa\u00e7\u00e3o de CI\/CD em Sistemas Legados<\/strong><\/h4>\n\n\n\n<p>A ado\u00e7\u00e3o de <strong>CI\/CD<\/strong> em uma base de c\u00f3digo completamente nova \u00e9 geralmente mais simples, pois permite a escolha de ferramentas e processos desde o in\u00edcio, al\u00e9m de possibilitar a cria\u00e7\u00e3o de testes do zero. No entanto, \u00e9 perfeitamente poss\u00edvel implementar <strong>CI\/CD<\/strong> em bases de c\u00f3digo existentes e mais antigas, mesmo que sejam sistemas legados.<\/p>\n\n\n\n<p>Muitas organiza\u00e7\u00f5es j\u00e1 conseguiram migrar grandes bases de c\u00f3digo para um pipeline de <strong>CI\/CD<\/strong> funcional. Esse processo envolve a transi\u00e7\u00e3o de <strong>releases<\/strong> espor\u00e1dicas, como a cada poucos meses, para um pipeline de <strong>Continuous Delivery<\/strong>, que possibilita realizar <strong>releases<\/strong> com muito mais frequ\u00eancia, como semanalmente. Durante essa transi\u00e7\u00e3o, aprendem-se li\u00e7\u00f5es valiosas sobre o que testar, como otimizar as <strong>builds<\/strong>, e como automatizar os <strong>deploys<\/strong>, preparando o caminho para a implementa\u00e7\u00e3o de um pipeline de <strong>Continuous Deployment<\/strong> totalmente funcional.<\/p>\n\n\n\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_rest_spring_java\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"REST API's RESTFul do 0 \u00e0  AWS com Spring Boot 3, Java e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/07-rest-spring-java.png\">\n<\/a>\n\n\n\n<h3><strong>Os Benef\u00edcios do Continuous Deployment<\/strong><\/h3>\n\n\n\n<h4><strong>Aumenta a frequ\u00eancia de deploys e diminui o tempo de ciclo<\/strong><\/h4>\n\n\n\n<p>O <strong><em>Continuous Deployment<\/em><\/strong> nos permitiu colocar c\u00f3digo em produ\u00e7\u00e3o em apenas 15 minutos. Esse \u00e9 um grande aumento na frequ\u00eancia de <em>deploys<\/em> em compara\u00e7\u00e3o ao ciclo de lan\u00e7amento de 3,5 meses que t\u00ednhamos com o Taplytics. Agora, podemos lan\u00e7ar e iterar mais r\u00e1pido, responder ao feedback dos usu\u00e1rios em tempo real e fazer <em>deploys<\/em> de c\u00f3digo v\u00e1rias vezes ao dia.<\/p>\n\n\n\n<h4><strong>Aumenta a produtividade dos desenvolvedores<\/strong><\/h4>\n\n\n\n<p>Quando seus desenvolvedores n\u00e3o precisam testar e implantar o c\u00f3digo manualmente, eles ganham muito mais tempo para realmente escrever c\u00f3digo. O <em>Continuous Deployment<\/em> (CD) alivia significativamente os desenvolvedores do processo de QA e deploy, permitindo que eles concentrem seu tempo e energia no desenvolvimento de novas funcionalidades e melhorias.<\/p>\n\n\n\n<h4><strong>Melhora a qualidade do trabalho dos desenvolvedores<\/strong><\/h4>\n\n\n\n<p>Automatizar os testes e <em>deploys<\/em> com <strong><em>CI\/CD<\/em><\/strong> fez com que nossos desenvolvedores realmente refletissem sobre o trabalho que est\u00e3o fazendo. Eles precisam se perguntar &#8220;Este c\u00f3digo est\u00e1 bem testado?&#8221; e &#8220;Ele est\u00e1 bem planejado?&#8221; j\u00e1 que dependem do sistema de verifica\u00e7\u00f5es que eles mesmos criaram para os testes automatizados.<\/p>\n\n\n\n<h4><strong>Facilita a depura\u00e7\u00e3o<\/strong><\/h4>\n\n\n\n<p>Qualquer <em>release<\/em> feita com <strong><em>CD<\/em><\/strong> \u00e9 pequena o suficiente para que seja muito f\u00e1cil identificar bugs. Em <em>releases<\/em> grandes, com mudan\u00e7as extensas, pode levar semanas para encontrar um bug. Com o <strong><em>CD<\/em><\/strong>, se algo der errado, voc\u00ea sabe a qual <em>release<\/em> o bug pertence, e a corre\u00e7\u00e3o do problema leva menos tempo.<\/p>\n\n\n\n<h4><strong>Menos estresse, mais confian\u00e7a<\/strong><\/h4>\n\n\n\n<p>Como fazemos <em>deploys<\/em> de pequenas e incrementais mudan\u00e7as com <strong><em>CD<\/em><\/strong>, os riscos s\u00e3o muito menores e nossos desenvolvedores n\u00e3o sofrem mais com a &#8220;ansiedade p\u00f3s-lan\u00e7amento&#8221; que sentiam com os lan\u00e7amentos mensais. Sem os grandes lan\u00e7amentos, podemos enviar o c\u00f3digo com confian\u00e7a, sabendo que, provavelmente, nenhuma de nossas mudan\u00e7as ir\u00e1 impactar ou quebrar toda a nossa plataforma. E se houver algum problema no c\u00f3digo, sabemos que podemos facilmente reverter as mudan\u00e7as ou desativar a funcionalidade com <strong><em>feature flags<\/em><\/strong>.<\/p>\n\n\n\n<h3><strong>Conclus\u00e3o<\/strong><\/h3>\n\n\n\n<p>A transi\u00e7\u00e3o para o <strong><em>Continuous Deployment<\/em><\/strong> \u00e9 uma grande mudan\u00e7a que requer o comprometimento de toda a sua organiza\u00e7\u00e3o para funcionar. Embora possa levar algum tempo para se ajustar e possa haver um per\u00edodo de tentativas e erros na configura\u00e7\u00e3o do pipeline, o per\u00edodo de adapta\u00e7\u00e3o vale a pena. Uma vez que seu pipeline de <strong><em>CD<\/em><\/strong> esteja configurado e funcionando corretamente, voc\u00ea estar\u00e1 implantando com mais frequ\u00eancia e automatizando mais do que jamais imaginou ser poss\u00edvel.<\/p>\n\n\n\n<h2>Treinamentos relacionados com essa postagem<\/h2>\n\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_rest_spring_java\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"REST API's RESTFul do 0 \u00e0  AWS com Spring Boot 3, Java e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/07-rest-spring-java.png\">\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_docker\" target=\"_blank\" rel=\"noopener\"><br>\n\t<img decoding=\"async\" style=\"max-width: 100%;\" title=\"Docker do 0 \u00e0 Maestria: Cont\u00eaineres Desmistificados mais 3 B\u00d4NUS\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/09-docker.png\"><br>\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_microservices_java\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Microservices do 0 com Spring Cloud, Spring Boot e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/14-microservices-java.png\">\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_ms_kotlin\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Microsservi\u00e7os do 0 com Spring Cloud, Kotlin e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/22-ms-kotlin.png\">\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_microservices-dotnet\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Arquitetura de Microsservi\u00e7os do 0 com ASP.NET, .NET 6 e C#\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/15-microservices-dotnet.png\">\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_tests_java\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Java Unit Testing com Spring Boot 3, TDD, Junit 5 e Mockito\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/24-tests_java.png\">\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_ci_cd_java_aws\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Java Continuous Integration e Continuous Delivery com AWS e Github Actions\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/27_CICD_JavaAWS.png\">\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_ci_cd_java_azure\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Java Continuous Integration e Continuous Delivery com Microsoft Azure e Github Actions\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/28_CICD_JavaAzure.png\">\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_rest_asp_net\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"REST API's RESTFul do 0 \u00e0 Azure com ASP.NET Core 5 e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/01-rest-asp.png\">\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_rest_spring_kotlin\" target=\"_blank\" rel=\"noopener\">\n  <img decoding=\"async\" style=\"max-width: 100%;\" title=\"REST API's RESTFul do 0 \u00e0 AWS com Spring Boot 3, Kotlin e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/18-rest-spring-kotlin.png\">\n<\/a>\n<a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_docker_para_aws\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" style=\"max-width: 100%;\" title=\"Docker para Amazon AWS Implante Apps Java e .NET com Travis CI\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/10-docker-to-aws.png\"><br>\n<\/a>\n","protected":false},"excerpt":{"rendered":"<p>Introdu\u00e7\u00e3o A transi\u00e7\u00e3o para Continuous Deployment (CD) \u00e9 uma jornada que pode parecer desafiadora \u00e0 primeira vista, mas os benef\u00edcios para a sua organiza\u00e7\u00e3o s\u00e3o incontest\u00e1veis. Se voc\u00ea est\u00e1 acostumado a ciclos de lan\u00e7amento prolongados, como mensal, semestral ou at\u00e9 anual, a ado\u00e7\u00e3o do CD pode transformar completamente o modo como voc\u00ea entrega software. Ao [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1720,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[299,296,294,26,295,297,298],"tags":[301,302,303,300,304],"_links":{"self":[{"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/posts\/1646"}],"collection":[{"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/comments?post=1646"}],"version-history":[{"count":21,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/posts\/1646\/revisions"}],"predecessor-version":[{"id":1711,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/posts\/1646\/revisions\/1711"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/media\/1720"}],"wp:attachment":[{"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/media?parent=1646"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/categories?post=1646"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/tags?post=1646"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}