Prévia do material em texto
Gerenciamento de entregas Apresentação A integração contínua é uma prática de desenvolvimento de software em que os desenvolvedores, frequentemente, disponibilizam suas alterações de código em um repositório central. Refere-se ao estágio de criação ou integração do processo de lançamento de software, no qual também se originam um componente de automação e um componente cultural. Como principais objetivos da integração contínua estão o de encontrar e investigar bugs de forma mais rápida, melhorar a qualidade do software e reduzir o tempo que leva para validar e lançar novas atualizações de software. Nesta Unidade de Aprendizagem, você aprenderá conceitos e exemplos de integração contínua, blue green deployment e provisionamento em ambientes distribuídos. Bons estudos. Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados: Comparar integração contínua, entrega contínua e implantação contínua.• Explicar blue-green deployment.• Descrever provisionamento em ambientes distribuídos.• Desafio Na implementação da integração contínua, é necessário trabalhar com uma cópia dos códigos ou aplicações que estão disponibilizados em produção. Certificar-se de que seus ambientes sejam os mesmos requer uma certa disciplina para aplicar boas práticas de gerenciamento de configuração. Veja isso no seguinte caso: A partir dessas informações, quais são os procedimentos corretos para garantir que nenhuma informação se perderá e que o site continuará funcionando corretamente após a atualização? Infográfico O provisionamento garante que servidores sejam preparados para receber a implantação de novos projetos e colaborar durantes as operações de rotina de manutenção. Neste Infográfico, você verá as quatro responsabilidades para o provisionamento em ambientes distribuídos. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. https://statics-marketplace.plataforma.grupoa.education/sagah/f913b33e-c074-4d61-95d6-39e15b25ccb1/02ac130e-e098-490d-82fd-2da2e4ee4547.jpg Conteúdo do Livro A integração contínua (IC) é um enorme passo à frente em produtividade e qualidade para a maioria dos projetos que a adotam. Ela assegura que as equipes que trabalham juntas para criar sistemas grandes e complexos possam fazê-lo com um nível mais alto de confiança e controle do que é possível sem ele. A IC garante que o código que foi criado funcione fornecendo feedback rápido sobre quaisquer problemas que possam apresentar com as alterações que são realizadas. É focado, principalmente, em afirmar que o código compila com sucesso e passa por um corpo de testes de unidade e aceitação. No capítulo Gerenciamento de entregas, da obra Testes de Software e Gerência de Configuração, para facilitar o seu entendimento, você verá conceitos e exemplos de integração contínua, blue green deployment e provisionamento em ambientes distribuídos. Boa leitura. TESTES DE SOFTWARE E GERÊNCIA DE CONFIGURAÇÃO Priscila Gonçalves Gerenciamento de entregas Introdução Ao final deste texto, você deve apresentar os seguintes aprendizados: Comparar integração contínua, entrega contínua e implantação contínua. Explicar o que é blue-green deployment. Descrever o provisionamento em ambientes distribuídos. Introdução A integração contínua tem como objetivo facilitar a implantação de softwares desenvolvidos de forma que o sistema fique inoperante pelo menor tempo possível ou que não fique inoperante em momento algum. Como você vai ver, a técnica blue-green deployment pode colaborar para isso e para a implantação contínua de desenvolvimento. Neste capítulo, você vai estudar a integração, a entrega e a implan- tação contínuas. Além disso, vai se familiarizar com a técnica blue-green deployment e com o provisionamento em ambientes distribuídos. Integração, entrega e implantação contínuas A integração contínua é uma prática de desenvolvimento de software por meio da qual os desenvolvedores frequentemente disponibilizam suas alterações de código em um repositório central. Ela se refere ao estágio de criação ou integração do processo de lançamento de software, em que também se originam um componente de automação e um componente cultural. Os principais objetivos da integração contínua são: encontrar e investigar bugs de forma mais rápida, melhorar a qualidade do software e reduzir o tempo que se leva para validar e lançar novas atualizações de um software. A integração contínua é necessária para facilitar e agilizar a convergência de alterações realizadas por diferentes desenvolvedores, minimizando os erros. Dessa forma, a atualização para os clientes é mais rápida e eficiente. A integração contínua é a primeira etapa da entrega contínua, na qual cada desenvolvedor mantém o seu trabalho em andamento continuamente integrado ao trabalho de todos os outros desenvolvedores. A diferença entre entrega contínua e implantação contínua está na decisão de negócios referente à implantação em produção. A entrega contínua consiste em manter a aplicação em um estado em que sempre possa ser implantada em produção. Já a implantação contínua implanta todas as alterações em produção todos os dias, ou com maior frequência. O funcionamento da integração contínua ocorre da seguinte forma: os desenvolvedores utilizam um repositório de forma comparti- lhada por meio de um sistema de controle de versão, como o Git e o Bitbucket; antes que ocorra cada confirmação por parte dos desenvolvedores, eles podem optar por executar testes de unidade localmente em seus códigos, como uma verificação extra que se dá antes da integração; o serviço de integração contínua cria e executa de forma automática os testes de unidade nas novas alterações de código, apresentando de imediato todos os erros (caso existam); a cada revisão confirmada pelo desenvolvedor, a integração contínua cria o teste automatizado, executando a distribuição contínua. Por meio da distribuição contínua, as alterações de códigos são criadas, testadas e preparadas de forma automática para que sejam liberadas em produção. Dessa forma, a distribuição contínua expande-se com base na integração contínua quando realiza a implantação de todas as alterações de código em um ambiente de teste ou produção. É o que você pode ver na Figura 1. Gerenciamento de entregas2 Figura 1. Integração contínua, entrega contínua e implementação contínua. Fonte: O que... (2019). Entre os benefícios da integração contínua, estão os listados a seguir. Melhora na produtividade do desenvolvedor: a integração contínua ajuda a equipe a ter maior produtividade ao liberar desenvolvedores de tarefas manuais, o que também reduz erros e bugs para os clientes. Investigação mais rápida e fácil de bugs: com a maior frequência de testes, a possibilidade de descobrir e investigar bugs mais cedo é maior, impedindo ou minimizando grandes problemas no futuro. Distribuição mais rápida de atualizações: a equipe consegue distri- buir atualizações para os clientes de forma mais rápida e com maior frequência. Blue-green deployment A blue-green deployment é uma técnica utilizada para reduzir o risco de implementações. Considere que o ambiente de produção atual está associado à cor azul; a técnica consiste em introduzir um ambiente paralelo verde, no qual estará a nova versão do software. Assim, quando tudo estiver testado e de acordo com o esperado para iniciar a operação, é necessário apenas direcionar os usuários para que passem a acessar o ambiente verde. Essa técnica é muito importante para implementar a entrega contínua, pois reduz o risco, permitindo a realização de testes antes que seja lançada a nova versão para produção. Além disso, ela permite implantações com tempo inoperacional quase zero e uma forma rápida de reverter o processo caso algo dê errado. A ideia fundamental é ter dois ambientes facilmente 3Gerenciamento de entregas alternáveis para intercalarentre eles. Há muitas maneiras de variar os de- talhes. Um projeto pode fazer a troca saltando o servidor web em vez de trabalhar no roteador. Outra variação seria usar o mesmo banco de dados, fazendo os switches azul e verde para as camadas da web e do domínio, como você pode ver na Figura 2. Figura 2. Blue-green deployment. Fonte: Fowler (2010, document on-line). A implantação azul-verde oferece uma maneira rápida de reverter o processo — se algo der errado, basta alternar o roteador de volta para o ambiente azul. Ainda há a questão de lidar com transações perdidas enquanto o ambiente verde estiver ativo. Contudo, dependendo do projeto, é possível alimentar transações para ambos os ambientes de forma a manter o ambiente azul como backup quando o verde estiver ativo. Uma vez que você tenha colocado o ambiente verde como ativo e ele estiver estável, você pode utilizar o ambiente azul como ambiente de prepa- ração para a etapa final de teste da próxima implementação. Quando você estiver pronto para o seu próximo lançamento, pode mudar de verde para azul da mesma forma. Assim, os ambientes verde e azul alternam regular- mente entre a versão anterior ativa (para retrocesso) e o armazenamento da próxima versão. Uma vantagem dessa abordagem é que ela põe em cena o mesmo mecanismo básico necessário para um trabalho hot-standby. Portanto, isso permite que se- jam testados os procedimentos de recuperação de erros graves em cada versão. Gerenciamento de entregas4 Provisionamento em ambientes distribuídos Diante do alto crescimento de informações das empresas, aumenta a quantidade de servidores e, consequentemente, ampliam-se os custos gerenciais e a comple- xidade do ambiente. Para solucionar essas questões, é indicada a virtualização de servidores, que oferece uma otimização da infraestrutura de tecnologia de informação (TI). Entre as vantagens da virtualização, considere as seguintes: redução do espaço físico necessário para armazenamento; redução do consumo de energia por equipamentos; redução da dissipação de calor e da necessidade de refrigeração; redução de conexões de cabos de rede; redução de tomadas e cabos de energia; redução de switches. Ou seja, caso seja necessário um novo servidor, basta criar uma máquina virtual nova, que vai reduzir o tempo de provisionamento de novos servidores. As máquinas virtuais são arquivos, e é muito simples criar máquinas que se tornam novos servidores em minutos. Esses novos servidores não significam gastos com a aquisição de equipamentos físicos nem aumento da complexidade. Quando um servidor não aguentar mais a adição de novas máquinas virtuais, basta adicionar mais um novo servidor físico à sua rede. O provisionamento garante que servidores sejam preparados para receber a implantação de novos projetos e colaborar durante as operações de rotina de manutenção. As etapas do provisionamento de servidores consistem em: selecionar servidores (um ou mais) entre os que estão disponíveis; instalar softwares, entre eles sistema operacional, aplicações, midd- leware e drivers; definir e configurar recursos do servidor, como endereço de Internet Protocol (IP), espaço em disco, entre outros. O provisionamento é um processo que exige tempo de gestores e técnicos de TI envolvidos. Existem ferramentas de automação que podem ser utiliza- das para agilizar esse processo. Entre as ferramentas, estão Chef e Puppet, que são open source. Outra forma de realizar essa automação é por meio de scripts desenvolvidos pela própria equipe, ou de uma combinação de soluções externas, internas e processos manuais, articulados a fim de que o processo seja agilizado. 5Gerenciamento de entregas FOWLER, M. BlueGreenDeployment. In: MARTIN Fowler. [S. l.: s. n.], 2015. Disponível em: https://martinfowler.com/bliki/BlueGreenDeployment.html. Acesso em: 30 jun. 2019. O QUE significa integração contínua? In: AMAZON. [S. l.: s. n.], 2019. Disponível em: https://aws.amazon.com/pt/devops/continuous-integration/. Acesso em: 30 jun. 2019. Leituras recomendadas BLUE-GREEN deployment. In: INFOQ Brasil. [S. l.: s. n., 2019]. Disponível em: https:// www.infoq.com/br/presentations/blue-green-deployment. Acesso em: 30 jun. 2019. HUMBLE, J.; FARLEY, D. Continuous delivery: anatomy of the deployment pipeline. In: INFORMIT. Hoboken: [S. n.], 2010. Disponível em: http://www.informit.com/articles/ article.aspx?p=1621865. Acesso em: 30 jun. 2019. PRESSMAN, R.; MAXIM, B. Engenharia de software: uma abordagem profissional. 8. ed. Porto Alegre: AMGH, 2016. ROUSE, M. Software process improvement and capability determination (SPICE). In: TECHTARGET. [S. l.: s. n.], 2008. Disponível em: https://searchsoftwarequality.techtarget. com/definition/Software-Process-Improvement-and-Capability-dEtermination. Acesso em: 30 jun. 2019. SCHACH, S. R. Engenharia de software: os paradigmas clássicos & orientado a objetos. Porto Alegre: AMGH, 2010. VIRTUALIZAÇÃO: o que é gerenciamento de virtualização? In: RED HAT. [S. l.: s. n., 2019]. Disponível em: https://www.redhat.com/pt-br/topics/virtualization/what-is-virtualiza- tion-management#. Acesso em: 30 jun. 2019. Gerenciamento de entregas6 Dica do Professor A integração contínua é a primeira etapa da entrega contínua, em que cada desenvolvedor mantém seu trabalho em andamento continuamente integrado a todos os outros desenvolvedores. A diferença entre entrega contínua e implantação contínua está na decisão de negócios referente à implantação em produção, pois a entrega contínua consiste em manter a aplicação em um estado em que sempre possa ser implantada em produção. No entanto, a implantação contínua está implantando todas as alterações em produção diariamente ou com maior frequência. Nesta Dica do Professor, você verá mais sobre os benefícios de utilizar a entrega contínua. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. https://fast.player.liquidplatform.com/pApiv2/embed/cee29914fad5b594d8f5918df1e801fd/bfad6e24d80d14232fd6fa8f7108b66d Exercícios 1) A seguinte afirmação: “Os dois ambientes precisam ser diferentes, mas tão idênticos quanto possível” se refere a qual das alternativas a seguir? A) Armazenamento em servidores físicos. B) Cloud computing. C) Puppet. D) Blue-green deployment. E) Spice. 2) Na implantação contínua, cada nova alteração que é enviada ao repositório dá início de forma automática a um processo automatizado que realiza o envio de mudanças para o ambiente solicitado. Existem muitas vantagens em relação à implantação contínua. Assinale a alternativa que apresenta algumas dessas vantagens: A) Visibilidade de produção de seus aplicativos e fornece feedback a cada alteração no sistema. B) Ajuda a controlar as mudanças, sem impedir seriamente as mudanças justificáveis, e controla a configuração. C) Gerenciamento e assinatura de documentos eletronicamente, e controla o ciclo de vida do software. D) Gerencia a acessibilidade e controla as mudanças sem impedir seriamente as mudanças justificáveis. E) Viabiliza o trabalho em equipe e gerencia assinatura de documentos eletronicamente. 3) O código alterado e/ou desenvolvido no projeto principal é integrado na mesma frequência com que as funcionalidades são desenvolvidas. O objetivo principal de sua utilização é verificar se as alterações ou novas funcionalidades não criarão defeitos no projeto já existente. Assinale a alternativa correspondente a essa afirmação: A) Blue-green deployment. B) Controle de mudanças. C) Virtualização de servidores. D) Provisionamento de aplicações. E) Integração contínua. 4) Integração contínua é uma prática realizada no desenvolvimento de softwares para realizar uma junção dos códigos, alternando e inserindo-os em um repositório central. Quais são os benefícios na utilização de ferramentas automatizadas para a integração contínua? A) Permitem que os desenvolvedores encontrem de forma rápida conflitos de versão,e não podem solucionar problemas de forma contínua. B) Permitem que sejam configurados o sistema e o ambiente de desenvolvimento. Permitem a configuração do sistema de build automatizado, integram com o repositório de controle de versão e permitem o envio de e-mails de notificação. C) O trabalho em equipe gera mais erros, minimizando os riscos, bugs não se acumulam, pois o erro pode ser detectado em horas e resolvido de forma mais rápida. D) O trabalho em equipe gera mais erros, maximiza os riscos, bugs podem se acumular, pois o erro pode ser detectado em horas, mas nem sempre podem ser resolvidos rapidamente. E) Permitem que os desenvolvedores encontrem de forma rápida conflitos de versão, maximizam os riscos e os bugs podem se acumular. 5) A entrega contínua é um processo automático em que é iniciado de forma manual quando o desenvolvedor tem a intenção de enviar uma versão atual da aplicação. Dentre os benefícios da entrega contínua, estão: A) Agilizar os processos, minimizar a performance da equipe, melhorar a segurança e a qualidade para os prazos e aumentar a insatisfação dos clientes. B) Agilizar os processos, acumular bugs, melhorar a segurança e a qualidade para os prazos e aumentar a insatisfação dos clientes. C) Agilizar os processos, melhorar a performance da equipe, dar maior segurança e qualidade para as entregas e aumentar a satisfação dos clientes. D) Agilizar os processos, maximizar a performance da equipe, melhorar a segurança e a qualidade para os prazos e aumentar a insatisfação dos clientes. E) Automatizar os processos, minimizar a performance da equipe, melhorar a segurança e a qualidade para os prazos e aumentar a insatisfação dos clientes. Na prática A entrega contínua funciona com a lógica de que quanto mais se gastar tempo para entregar um produto ou serviço, maior será o custo do projeto. Sendo assim, será menos viável para os desenvolvedores. Algumas práticas podem melhorar o processo, garantindo a participação do cliente em todo o período evolutivo do ciclo do software, evitando que processos longos ocorram, buscando integração das equipes e melhorando o processo de comunicação. Na Prática, você verá o caso da empresa Dev S.A., que está implantando o processo de entrega contínua. Para que isso ocorra da melhor forma possível, é necessário seguir as etapas. Jorge, que trabalha na área técnica, ficou responsável por elencar essas etapas para que todos consigam realizar a tarefa. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. https://statics-marketplace.plataforma.grupoa.education/sagah/df41c77f-722c-4b0f-a916-317b650f9cc2/256a5e7c-edc7-4a6f-a252-4422de5de0b1.png Saiba mais Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor: Integração contínua A integração contínua é a primeira etapa da entrega contínua, na qual cada desenvolvedor mantém seu trabalho em andamento continuamente integrado a todos os outros desenvolvedores. Leia este artigo para entender como funciona todo o processo. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. AWS CodeDeploy — Deploy descomplicado Para saber o passo a passo da técnica blue-green deployment, veja este conteúdo, que descreve o que é o CodeDeploy, mostrando os principais conceitos por trás da ferramenta e os cenários em que é possível ou não utilizá-la. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. Blue-green deployment: entrega contínua e rollback imediato Blue-green deployment é uma técnica utilizada para automatizar a implantação, reduzir erros e aumentar a velocidade nas entregas para os clientes. Acesse o vídeo e saiba mais a respeito da utilização, das vantagens e das desvantagens sobre a técnica. https://www.desenvolvimentoagil.com.br/xp/praticas/integracao https://medium.com/trainingcenter/aws-codedeploy-deploy-descomplicado-5306170eab8b Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. https://www.infoq.com/br/presentations/blue-green-deployment