Projetar, criar e orquestrar com práticas modernas

Concluído

As práticas de desenvolvimento e operacionais evoluíram ao longo dos anos para se tornarem mais diretas e integradas. As práticas modernas envolvem mudanças organizacionais e a adoção de novas ferramentas para aprimorar a agilidade operacional de uma organização. Nesta unidade, você aprenderá alguns dos principais conceitos para aprimorar a capacidade da sua organização de criar e implantar aplicativos.

DevOps

DevOps é a união de pessoas, processos e produtos para habilitar a entrega contínua de valor para os usuários finais. O objetivo de DevOps é reunir as funções de desenvolvimento e operações e quebrar as barreiras existentes entre elas. Essa combinação cria as equipes multidisciplinares que trabalham em conjunto com ferramentas e práticas compartilhadas e eficientes. As práticas essenciais de DevOps incluem planejamento ágil, integração contínua, entrega contínua e monitoramento de aplicativos.

A cultura de DevOps enfatiza equipes pequenas e multidisciplinares que trabalham de maneira autônoma e assumem responsabilidade coletiva de como os usuários finais experienciarão o software. As equipes de DevOps aplicam práticas ágeis e incluem operações nas responsabilidades de cada equipe. As equipes trabalham em pequenos lotes que se concentram em aprimorar a entrega de ponta a ponta do valor para o cliente e se esforçam para eliminar desperdícios e impedimentos ao longo do caminho. Não há silos nem jogo de culpa, pois cada equipe é mutuamente responsável.

Há diversos serviços e ferramentas disponíveis na Microsoft para ajudar uma organização a adotar e desenvolver práticas de DevOps. O Azure DevOps é um pacote de produtos e ferramentas que as equipes que adotam as práticas de DevOps podem usar para planejar, desenvolver, fornecer e operar suas soluções.

O Azure Boards faz parte do Azure DevOps que ajuda as equipes a planejar e acompanhar o trabalho. O Azure Boards tem ferramentas ágeis modernas, como quadros Kanban, listas de pendências, painéis e painéis do scrum. Essas ferramentas ajudam sua equipe a obter maior visibilidade do trabalho planejado e do trabalho entregue.

Screenshot of a Kanban board on Azure Boards.

O GitHub é a plataforma mais amplamente usada para criar, entregar e compartilhar software. Em sua essência, o GitHub é uma plataforma de controle de versão que permite que uma comunidade global de indivíduos e equipes colaborem em projetos de desenvolvimento de software. Esses projetos podem ser mantidos privados nas organizações ou compartilhados por meio de comunidades públicas de desenvolvedores de software distintos. O GitHub também inclui recursos para criar e testar implantações, acompanhar problemas e criar fluxos de trabalho personalizados em seus repositórios.

O Azure DevOps e o GitHub integram-se, e as organizações que estão operando ou adotando um modelo de DevOps frequentemente usam esses serviços juntos.

CI/CD (integração contínua e entrega contínua)

CI (integração contínua) é a prática de criar e testar o código sempre que um membro da equipe confirma as alterações no controle de versão. A CI incentiva os desenvolvedores a compartilhar seus códigos e testes de unidade mesclando as alterações em um repositório compartilhado de controle de versão após a conclusão de cada tarefa pequena. A confirmação de código dispara um sistema de build automatizado para obter o código mais recente do repositório compartilhado e, em seguida, compilar, testar e validar a ramificação principal completa.

A CI ajuda os desenvolvedores a identificar bugs antecipadamente e aprimora a qualidade do software, uma vez que o código é verificado, criado e confirmado com mais frequência. Em vez de trabalhar no código por um mês e descobrir vários problemas quando o check-in das alterações for eventualmente realizado. Os desenvolvedores podem fazer check-in de conjuntos menores de alterações e ter certeza de que o código não introduz grandes volumes de problemas da ramificação principal.

CD (entrega contínua) é o processo de compilar, testar, configurar e implantar de um ambiente de build para um ambiente de produção. Diversos ambientes de teste ou preparo criam um pipeline de lançamento para automatizar a criação da infraestrutura e da implantação de uma compilação. Ambientes sucessivos dão suporte a atividades de execução cada vez mais longas de integração, carga e teste de aceitação do usuário.

A integração contínua e a entrega contínua geralmente são combinadas em um só pipeline conhecido como CI/CD. A integração contínua inicia o processo de entrega contínua. Depois, as fases de pipeline de CI/CD são alteradas de cada ambiente sucessivo para o próximo após a conclusão bem-sucedida dos testes definidos em cada fase. Como desenvolvedor, é possível fazer o check-in de códigos, validar se eles passaram em todos os testes e não apresentam novos problemas na ramificação principal. Depois, você pode implementá-los na produção com a confiança de que não afetarão a operação do ambiente de produção.

O Azure Pipelines é um serviço de nuvem que pode ser usado para compilar e testar o projeto de código automaticamente e disponibilizá-lo a outras pessoas. Ele funciona com praticamente qualquer linguagem ou tipo de projeto e integra-se ao GitHub, ao GitHub Enterprise, ao Azure Repos e a outros sistemas de controle de versão. O Azure Pipelines combina a CI (integração contínua) e a CD (entrega contínua) para testar e criar seu código de forma constante e consistente e enviá-lo para qualquer destino.

Visualization of CI/CD pipeline.

Você também pode usar o GitHub Actions para criar funcionalidades de CI/CD em seus repositórios do GitHub. Com o GitHub Actions, é possível criar fluxos de trabalho que são processos automatizados personalizados para compilar, testar, empacotar, lançar e implantar código.

Microsserviços

Em uma arquitetura de microsserviços, os serviços são pequenos, independentes e fracamente acoplados. É possível implantar e escalar cada serviço de maneira independente. As arquiteturas de microsserviços geralmente são adotadas para novos aplicativos que estão adotando práticas de DevOps.

Logical diagram of a microservices architecture.

Um microsserviço é suficientemente pequeno para que uma só equipe reduzida de desenvolvedores possa escrever o código dele e mantê-lo. Como os serviços podem ser implantados de modo independente, uma equipe pode atualizar um serviço existente sem recompilar e reimplantar o aplicativo inteiro.

Normalmente, cada serviço é responsável por seus próprios dados. A estrutura de dados é isolada, de modo que as atualizações ou alterações no esquema não sejam dependentes de outros serviços. Geralmente, as solicitações de dados são tratadas por meio de APIs e fornecem um modelo de acesso consistente e bem definido. Detalhes da implementação interna ficam ocultos de consumidores de serviços.

Como cada serviço é independente, eles podem usar diferentes pilhas de tecnologia, estruturas e SDKs. É comum ver serviços dependerem de chamadas REST para comunicação entre serviços, usando APIs bem definidas em vez do RPC ou outros métodos de comunicação personalizados.

As arquiteturas de microsserviços são independentes de tecnologia, mas você verá com frequência contêineres ou tecnologias sem servidor serem usados para sua implementação. O CI/CD (implantação contínua/integração contínua) é usado frequentemente para aumentar a velocidade e a qualidade das atividades de desenvolvimento.

Consistência do ambiente

Uma parte essencial para o desenvolvimento e a implantação confiáveis de aplicativos é garantir que os ambientes sejam consistentes com relação ao desenvolvimento, ao teste e à produção. Como os processos de CI/CD movem seu código pelos seus ambientes, qualquer variação arrisca a introdução de áreas em que os testes podem falhar ou ignorar defeitos. Por meio da automação, é possível ativar e desativar ambientes conforme necessário, o que pode ser incluído como parte dos processos de CI/CD.

Imagine um ambiente em que você estava criando um aplicativo .NET Core e seus ambientes de teste e de produção estavam executando versões diferentes. Sua implantação pode ser bem-sucedida no ambiente de teste, mas causar problemas no de produção porque está executando uma versão diferente do aplicativo. A inclusão de suas definições de ambiente como parte da implantação ajudará a garantir que seu código seja criado e implantado em uma infraestrutura consistente, de ponta a ponta.

Verificar seu conhecimento

1.

Qual das afirmações a seguir descreve um benefício de incorporar CI/CD em seus processos de desenvolvimento?

2.

Qual das afirmações a seguir sobre as arquiteturas de microsserviço é verdadeira?