Soluções de DevTest e DevOps para microsserviços

Boards
Registro de Contêiner
Serviço de Kubernetes
Pipelines
GitHub

As arquiteturas de microserviço criam aplicativos como coleções de serviços livremente acoplados.Microservice architectures design applications as collections of loosely coupled services. Em uma arquitetura de microserviços, os serviços são refinados e os protocolos são leves.In a microservices architecture, services are fine-grained and protocols are lightweight. Os microserviços oferecem benefícios como a separação clara de preocupações e o desacoplamento de dependências.Microservices offer benefits such as clear separation of concerns and decoupling of dependencies.

Os microserviços introduzem complexidades no ciclo de desenvolvimento em comparação com os aplicativos monolíticos tradicionais.Microservices introduce complexities in the development cycle compared to traditional monolithic applications. Tradicionalmente, o desenvolvimento ocorre em uma réplica local ou virtual da pilha de aplicativos, que configura e executa componentes de computação e armazenamento localmente em isolamento.Traditionally, development occurs in a local or virtual replica of the application stack, which configures and runs compute and storage components locally in isolation. Em um modelo de microserviço, os desenvolvedores precisam testar seus serviços em relação à arquitetura existente, detectar problemas de integração cedo para economizar no tempo de compilação e implantação e manter as compilações integradas limpas ao longo do ciclo de vida do aplicativo.In a microservice model, developers need to test their services against the existing architecture, catch integration issues early to save on build and deployment time, and keep integrated builds clean over the lifecycle of the application.

O teste de desenvolvimento (DevTest) é uma abordagem de desenvolvimento de software que integra testes antecipadamente na fase de desenvolvimento para agilizar o desenvolvimento.Development testing (DevTest) is a software development approach that integrates testing early in the development phase to speed development. DevOps é um conjunto de práticas que combina o desenvolvimento de software e as operações de ti para reduzir o ciclo de desenvolvimento e fornecer entrega contínua de alta qualidade.DevOps is a set of practices that combine software development and IT operations to shorten the development cycle and provide high-quality continuous delivery. Kubernetes é um sistema de orquestração de contêiner de software livre para automatizar implantações de aplicativo.Kubernetes is an open-source container orchestration system for automating application deployments.

Essa arquitetura de solução modela um ambiente de desenvolvimento e implantação que usa DevOps em DevTest para um desenvolvimento iterativo rápido de um aplicativo de microatendimento do AKs (serviço kubernetes do Azure) .This solution architecture models a development and deployment environment that uses DevOps in DevTest for rapid iterative development of an Azure Kubernetes Service (AKS) microservice application.

ArquiteturaArchitecture

Diagrama mostrando a configuração de DevTest e DevOps para um aplicativo de microatendimento.

  1. Os desenvolvedores usam o processo local com o kubernetes para executar suas versões de microatendimento locais no contexto do cluster de desenvolvimento kubernetes.Developers use Local Process with Kubernetes to run their local microservice versions within the context of the development Kubernetes cluster. Conectar-se ao cluster durante a depuração do serviço permite testes e desenvolvimento rápidos no contexto completo do aplicativo.Connecting to the cluster while debugging the service allows quick testing and development in the full application context.

  2. Cada codebase de microserviço usa um repositório de código do GitHub separado para o controle do código-fonte.Each microservice codebase uses a separate GitHub code repository for source control.

  3. As ações do GitHub compilam as imagens de contêiner de microserviço e as enviam para registros de contêiner do Azure.GitHub Actions builds the microservice container images and pushes them to Azure Container Registries. As ações do GitHub também atualizam a marca mais recente de repositórios para CI (integração contínua) ou repositórios de marcas para liberação.GitHub Actions also updates the latest tag of repositories for continuous integration (CI), or tags repositories for release.

  4. Os testes automatizados de ações do GitHub geram itens de trabalho para Azure boards, tornando todos os itens de trabalho gerenciáveis em um único lugar.GitHub Actions automated testing generates work items for Azure Boards, making all work items manageable in one place.

  5. As extensões de Visual Studio Code dão suporte à integração do Azure boards e do github.Visual Studio Code extensions support Azure Boards and GitHub integration. A associação de Azure Boards itens de trabalho com o GitHub repositórios vincula os requisitos ao código, orientando o loop de desenvolvimento para frente.Associating Azure Boards work items with GitHub repos ties requirements to code, driving the development loop forward.

  6. As confirmações mescladas no gatilho Branch de integração compila as ações do GitHub e os Pushes do Docker para os registros de contêiner DevTest.Commits merged into the integration branch trigger GitHub Actions builds and Docker pushes to the DevTest container registries. Cada microserviço tem seu próprio repositório em registros de contêineres, paralelizando os repositórios do GitHub.Each microservice has its own repository in Container Registries, paralleling the GitHub repositories. As compilações de CI geralmente são marcadas com as mais recentes, representando as compilações mais recentes de microserviço bem-sucedidas.CI builds are usually tagged with latest, representing the most recent successful microservice builds.

  7. Azure pipelines executa o apply comando kubernetes para disparar a implantação das imagens de registro de contêiner atualizadas nos clusters DevTest kubernetes.Azure Pipelines runs the Kubernetes apply command to trigger deployment of the updated Container Registry images to the DevTest Kubernetes clusters. O Azure pode autenticar AKS para executar pulls de registro de contêiner autônomo, simplificando o processo de implantação contínua (CD).Azure can authenticate AKS to run unattended Container Registry pulls, simplifying the continuous deployment (CD) process.

    Azure Pipelines usa Azure Key Vault para consumir com segurança segredos como credenciais e cadeias de conexão necessárias para as configurações de versão e implantação.Azure Pipelines uses Azure Key Vault to securely consume secrets like credentials and connection strings required for release and deployment configurations.

  8. Quando uma versão do aplicativo está pronta para teste de controle de qualidade (QA), Azure Pipelines dispara uma versão de QA.When a version of the application is ready for quality assurance (QA) testing, Azure Pipelines triggers a QA release. O pipeline marca todas as imagens apropriadas com a próxima versão incremental, atualiza o manifesto kubernetes para refletir as marcas de imagem e executa o apply comando.The pipeline tags all appropriate images with the next incremental version, updates the Kubernetes manifest to reflect the image tags, and runs the apply command. Neste exemplo, embora um desenvolvedor possa estar Iterando em um serviço isoladamente, somente as compilações integradas por meio de CI/CD são movidas para a implantação.In this example, while a developer may be iterating on a service in isolation, only builds integrated via CI/CD are moved over to deployment.

  9. Após o teste ter aprovado uma versão do serviço para implantação, as ações do GitHub promovem uma versão do registro de contêiner DevTest para um registro de contêiner de produção.After testing has approved a version of the service for deployment, GitHub Actions promotes a release from the DevTest Container Registry to a Production Container Registry. As ações do GitHub marcam as imagens com a versão apropriada e as enviam para o registro de contêiner de produção, seguindo as práticas recomendadas do registro de contêiner.GitHub Actions tags the images with the appropriate version and pushes them into the Production Container Registry, following container registry best practices.

  10. Azure Pipelines cria uma versão para produção.Azure Pipelines creates a release to Production. O pipeline impõe transformações de aprovação e condições de pré-teste e pós-estágio para proteger o ambiente de produção de uma implantação inadvertida ou incorreta.The pipeline imposes approval gates and pre-stage and post-stage conditions to protect the Production environment from inadvertent or incorrect deployment.

O aplicativo usa Azure Cosmos DB para sua camada de banco de dados distribuída globalmente.The application uses Azure Cosmos DB for its globally distributed database tier.

Todos os serviços e ambientes relatam métricas para Azure monitor.All services and environments report metrics to Azure Monitor.

Nesta solução, um único Azure Active Directory (Azure AD) gerencia a identidade para as assinaturas de DevTest e de produção.In this solution, a single Azure Active Directory (Azure AD) manages identity for both the DevTest and Production subscriptions. O Azure RBAC (controle de acesso baseado em função) restringe o acesso a recursos protegidos, impedindo a modificação não autorizada ou inadvertida de recursos de produção.Azure role-based access control (Azure RBAC) restricts access to protected resources, preventing unauthorized or inadvertent modification of Production resources. Os desenvolvedores não têm os mesmos níveis de controle de acesso em produção que em suas áreas restritas do DevTest.Developers don't have the same access control levels in Production as in their DevTest sandboxes.

ComponentesComponents

  • O Azure DevTest Labs fornece laboratórios que têm todas as ferramentas e software necessários para criar ambientes.Azure DevTest Labs provides labs that have all the necessary tools and software to create environments. Os desenvolvedores podem gerenciar recursos de forma eficiente sem esperar por aprovações.Developers can efficiently self-manage resources without waiting for approvals. Com o DevTest Labs, as equipes podem controlar os custos e regulamentar os recursos por laboratório, concedendo permissão e flexibilidade aos desenvolvedores para operar suas áreas restritas dentro das restrições de custo.With DevTest Labs, teams can control costs and regulate resources per lab, granting developers permission and flexibility to operate their sandboxes within cost constraints.

  • O GitHub é uma plataforma de Hospedagem de código para controle de versão e colaboração.GitHub is a code hosting platform for version control and collaboration. Um repositório de controle de origem do GitHub contém todos os arquivos de projeto e seu histórico de revisão.A GitHub source-control repository contains all project files and their revision history. Os desenvolvedores podem trabalhar juntos para contribuir, discutir e gerenciar código no repositório.Developers can work together to contribute, discuss, and manage code in the repository.

  • As ações do GitHub fornecem um conjunto de fluxos de trabalho de Build e versão, cobrindo CI, testes automatizados e implantações de contêiner.GitHub Actions provides a suite of build and release workflows, covering CI, automated testing, and container deployments.

  • Azure boards é um serviço para gerenciar o trabalho para projetos de software.Azure Boards is a service for managing work for software projects. Azure Boards traz um rico conjunto de recursos, incluindo suporte nativo para as metodologias de Scrum e Kanban, painéis personalizáveis e relatórios integrados.Azure Boards brings a rich set of capabilities including native support for Scrum and Kanban methodologies, customizable dashboards, and integrated reporting.

  • Azure pipelines é um serviço de CI/CD totalmente em destaque que pode implantar automaticamente imagens de registro de contêiner atualizadas em clusters kubernetes.Azure Pipelines is a fully featured CI/CD service that can automatically deploy updated Container Registry images to Kubernetes clusters.

  • Azure Key Vault armazena com segurança e controla rigidamente o acesso a segredos como chaves de API, senhas e certificados.Azure Key Vault securely stores and tightly controls access to secrets like API keys, passwords, and certificates. Para obter mais informações sobre Key Vault em cenários DevOps, consulte DevSecOps no Azure e DevSecOps no GitHub.For more information about Key Vault in DevOps scenarios, see DevSecOps in Azure and DevSecOps in GitHub.

  • O registro de contêiner do Azure dá suporte à criação, armazenamento e gerenciamento de imagens de contêiner e artefatos em registros privados para todos os tipos de implantações de contêiner.Azure Container Registry supports building, storing, and managing container images and artifacts in private registries for all types of container deployments.

  • O serviço kubernetes do Azure simplifica a implantação de clusters kubernetes gerenciados descarregando grande parte da complexidade, da responsabilidade e da sobrecarga operacional no Azure.Azure Kubernetes Service makes it simple to deploy managed Kubernetes clusters by offloading much of the complexity, responsibility, and operational overhead to Azure.

  • A plataforma de identidade corporativa do Azure Active Directory (Azure AD) fornece logon único e autenticação multifator para controlar o acesso do usuário.Azure Active Directory (Azure AD) enterprise identity platform provides single sign-on and multifactor authentication to govern user access. Um único Azure AD pode gerenciar a identidade de todos os ambientes entre assinaturas.A single Azure AD can manage identity for all environments across subscriptions. O Azure RBAC (controle de acesso baseado em função) restringe o acesso a recursos protegidos, impedindo a modificação não autorizada ou inadvertida de recursos de produção.Azure role-based access control (Azure RBAC) restricts access to protected resources, preventing unauthorized or inadvertent modification of production resources.

  • O Azure Cosmos DB é um banco de dados como serviço totalmente gerenciado e amplamente distribuído que dá suporte a aplicativos de alta disponibilidade, de várias regiões e a APIs SQL e NoSQL.Azure Cosmos DB is a fully managed, widely distributed database-as-a-service that supports high availability, multi-region applications, and both SQL and NoSQL APIs. O Azure Cosmos DB inclui recursos de DevTest como um emulador de Cosmos DB local que se integra ao Azure DevOps e camadas de baixo custo para gerenciar custos em áreas restritas do DevTest.Azure Cosmos DB includes DevTest features like a local Cosmos DB emulator that integrates with Azure DevOps, and low-cost tiers for managing costs in DevTest sandboxes.

  • Azure monitor pode monitorar ambientes de produção e DevTest.Azure Monitor can monitor both Production and DevTest environments. Azure Monitor coleta dados de log de sistemas operacionais de VM e arquivos de despejo de memória e os agrega para exibição na central de segurança do Azure.Azure Monitor collects log data from VM operating systems and crash dump files, and aggregates them for viewing in Azure Security Center.

AlternativasAlternatives

  • Azure Repos é uma alternativa ao GitHub para hospedagem de repositório git.Azure Repos is an alternative to GitHub for Git repository hosting. Com Azure Repos, Azure Boards e Azure Pipelines, todos os Azure DevOps Services usam o mesmo portal e interface do usuário, consolidando os serviços de que os desenvolvedores precisam para atividades DevOpss.With Azure Repos, Azure Boards, and Azure Pipelines, all Azure DevOps Services use the same portal and user interface, consolidating the services developers need for DevOps activities.

  • Algumas integrações disponíveis em Azure Pipelines, como conexão de serviço ou autenticação diretamente no backbone do Azure, não existem atualmente em ações do GitHub.Some integrations available in Azure Pipelines, such as service connection or authentication directly into the Azure backbone, don't currently exist in GitHub Actions. Para essas necessidades, considere o uso de Azure Pipelines em vez de ações do GitHub para atividades de CI e compilação.For these needs, consider using Azure Pipelines instead of GitHub Actions for CI and build activities.

  • Em um sistema amplamente distribuído, há benefícios para separar os microserviços em repositórios individuais.In a widely distributed system, there are benefits to separating microservices into individual repositories. A separação de propriedade e a permissão é mais simples, e os projetos em diferentes idiomas são mais fáceis de manter do que com um único repositório.Separation of ownership and permission is simpler, and projects in different languages are easier to maintain than with a single repository. No entanto, em soluções com menos microserviços no mesmo idioma ou tempo de execução, a manutenção de um único repositório Git para o projeto pode ser mais fácil.However, in solutions with fewer microservices all in the same language or runtime, maintaining a single Git repository for the project may be easier.

Próximas etapasNext steps