Soluções de DevTest e DevOps para PaaS

Boards
Azure DevOps
Pipelines
GitHub

Na computação em nuvem de PaaS (plataforma como serviço) , um provedor de serviços fornece uma plataforma para que os clientes desenvolvam, executem e gerenciem aplicativos sem precisar criar e manter a infraestrutura.In platform as a service (PaaS) cloud computing, a service provider delivers a platform for clients to develop, run, and manage applications without having to build and maintain infrastructure. O desenvolvimento de soluções com base nos recursos e serviços da plataforma Azure remove a sobrecarga de gerenciamento de máquinas virtuais, redes virtuais, discos e configurações relacionadas.Solution development based on Azure Platform resources and services removes the overhead of managing virtual machines, virtual networks, disks, and related configurations.

O teste de desenvolvimento (DevTest) é uma abordagem de desenvolvimento de software que integra testes antecipadamente na fase de desenvolvimento.Development testing (DevTest) is a software development approach that integrates testing early in the development phase. DevOps é um conjunto de práticas que combinam desenvolvimento de software e operações de ti, para reduzir o ciclo de desenvolvimento e fornecer entrega contínua com alta qualidade.DevOps is a set of practices that combine software development and IT operations, to shorten the development cycle and provide continuous delivery with high quality.

Essa arquitetura de solução combina sobrecarga reduzida e um ferramentas DevOps para dar suporte a ciclos de iteração rápidos de DevTest e um ambiente de desenvolvimento rápido com recursos de PaaS.This solution architecture combines reduced overhead and a DevOps toolchain to support rapid DevTest iteration cycles and a fast development environment with PaaS resources.

ArquiteturaArchitecture

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

  1. Os desenvolvedores usam ambientes de desenvolvimento predefinidos do GitHub Codespaces para evitar a configuração manual de ambientes de desenvolvimento.Developers use GitHub Codespaces pre-configured development environments to avoid manually configuring development environments. Os desenvolvedores podem usar o Codespaces no navegador ou por meio de Visual Studio Code.Developers can use Codespaces in-browser or through Visual Studio Code.

  2. O código-fonte está disponível no GitHub repositórios, que se integra perfeitamente com o DevOps do Azure.Source code is available in GitHub repos, which integrate seamlessly with Azure DevOps.

  3. Semelhante ao DevOps do Azure, as ações do GitHub definem compilações automatizadas para disparar em confirmações do GitHub ou solicitações de pull.Similar to Azure DevOps, GitHub Actions sets automated builds to trigger on GitHub commits or pull requests. Na solução atual, a ação de compilação publica artefatos em um pacote de origem do pacote do GitHub para implantação.In the current solution, the build action publishes artifacts to a GitHub Package source package for deployment.

  4. Azure boards se conecta de volta ao GitHub repositórios para gerar itens de trabalho de teste automatizado e manual e rastreia todo o trabalho no ciclo de desenvolvimento.Azure Boards connects back to GitHub Repos to generate work items from automated and manual testing, and tracks all work in the development cycle.

  5. Os desenvolvedores criam recursos ou corrigem as ramificações que associam itens de trabalho com sprints ou ciclos de desenvolvimento, controlando todos os códigos com tarefas e requisitos.Developers create feature or fix branches that associate work items with development sprints or cycles, tracking all code with tasks and requirements. Com essa abordagem, os desenvolvedores mantêm uma velocidade de loop de desenvolvimento ativo essencial para o desenvolvimento de software ágil.With this approach, developers maintain an active development loop velocity that is critical to agile software development.

  6. Azure pipelines é a solução para implantações de PaaS do Azure.Azure Pipelines is the solution for Azure PaaS deployments. Azure Pipelines trata das tarefas de implantação contínua (CD) e de versão, que consomem as versões de pacote expostas por compilações de ações do GitHub.Azure Pipelines handles continuous deployment (CD) and release tasks, which consume the package versions exposed by GitHub Actions builds. 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.

  7. Azure Pipelines tarefas de implantação especificamente dão suporte a recursos de PaaS do Azure, incluindo implantações de aplicativo Web:Azure Pipelines deployment tasks specifically support Azure PaaS resources, including web application deployments:

    1. Em conjunto com as compilações contínuas de ações do GitHub, uma versão contínua implanta a compilação mais recente do aplicativo em um ambiente de desenvolvimento.In conjunction with the continuous builds from GitHub Actions, a continuous release deploys the latest application build to a Development environment.
    2. O pipeline promove a compilação selecionada para teste até o próximo anel de implantação, o ambiente de teste.The pipeline promotes the build selected for testing up to the next deployment ring, the Test environment.
    3. Depois que a compilação passa todos os testes, ela é promovida e preparada no próximo anel externo para o teste de aceitação do usuário (UAT).After the build passes all tests, it's promoted and staged in the next outer ring for User Acceptance Testing (UAT).

    Todos os três ambientes DevTest existem sob uma assinatura de custo com desconto do Azure DevTest.All three DevTest environments exist under a discounted-cost Azure DevTest Subscription. Azure Policy pode adicionar mais regras para o tamanho e o número de serviços de aplicativos ou bancos de dados PaaS para limitar os custos.Azure Policy can add additional rules for the size and number of App Services or PaaS databases to limit costs.

  8. Quando a qualidade da solução atinge um estado de produção, Azure Pipelines dispara uma versão de produção.When solution quality reaches a Production state, Azure Pipelines triggers a Production release. O pipeline limita as implantações de produção para o número mínimo necessário.The pipeline limits Production deployments to the minimum number necessary.

    Para um serviço de aplicativo, uma versão de pipelines pode implantar a versão de compilação direcionada para o recurso de produção no slot do aplicativo de pré-produção e, em seguida, alternar slots para produção no local.For an App Service, a Pipelines release can deploy the targeted build version to the Production resource in the Pre-Production app slot, and then swap slots to Production in place. Se algo der errado durante a troca de pré-produção para produção, o serviço de aplicativo poderá reverter a troca para segurança de implantação extra.If something goes wrong during the swap of Pre-Production to Production, App Service can roll back the swap for extra deployment safety.

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.

O Terraform provisiona e modifica recursos para cada ambiente, personalizando tamanho, contagem de instâncias e outras propriedades.Terraform provisions and modifies resources for each environment, tailoring size, instance count, and other properties. A solução atual modela uma pilha de ambiente do serviço de Azure App, o cache do Azure para Redis e o banco de dados SQL do Azure.The current solution models an environment stack of Azure App Service, Azure Cache for Redis, and Azure SQL Database.

Azure monitor funciona em assinaturas para monitorar todos os ambientes e coletar logs, relatórios de despejo de memória e dados de aplicativos.Azure Monitor works across subscriptions to monitor all environments and collect logs, crash dump reports, and application data.

ComponentesComponents

  • O GitHub é uma plataforma de Hospedagem de código para controle de versão e colaboração, com outros recursos integrados:GitHub is a code hosting platform for version control and collaboration, with other integrated features:

    • 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.
    • O GitHub Codespaces fornece aos desenvolvedores ambientes de desenvolvimento pré-configurados que abrangem as dependências da biblioteca, a configuração do usuário e as extensões.GitHub Codespaces provide developers with pre-configured development environments that cover library dependencies, user configuration, and extensions. Os desenvolvedores podem provisionar o codespaces no GitHub e usá-los no navegador ou por meio de Visual Studio Code.Developers can provision codespaces in GitHub, and use them either in-browser or through Visual Studio Code.
    • As ações do GitHub fornecem um conjunto de fluxos de trabalho de Build e versão, cobrindo CI (integração contínua), testes automatizados e implantações de contêineres ou de Azure Resource Manager (ARM) .GitHub Actions provide a suite of build and release workflows, covering continuous integration (CI), automated testing, and Azure Resource Manager (ARM) template or container deployments.
    • O serviço de Hospedagem de pacote de pacotes do GitHub permite hospedar pacotes de software e usá-los como dependências em projetos.GitHub Packages package hosting service allows hosting software packages and using them as dependencies in projects.
  • 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 implanta as imagens de aplicativo da VM.Azure Pipelines deploys the VM application images. Os pipelines também podem implantar os próprios recursos da VM por meio de modelos de Azure Resource Manager (ARM).Pipelines can also deploy the VM resources themselves, through Azure Resource Manager (ARM) templates. Essa Infraestrutura como código pode ser controlada por fonte e configurada para CI/CD, garantindo que a infraestrutura permaneça atualizada.This infrastructure-as-code can be source controlled and configured for CI/CD, ensuring that the infrastructure remains up to date.

  • 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.

  • A plataforma de identidade do Azure ad Enterprise fornece logon único e autenticação multifator para controlar o acesso do usuário aos recursos.Azure AD enterprise identity platform provides single sign-on and multifactor authentication to govern user access to resources. No cenário atual, o Azure AD funciona com o RBAC do Azure para restringir o acesso por ambiente.In the current scenario, Azure AD works with Azure RBAC to restrict access per environment.

  • O Terraform é uma ferramenta de terceiros que provisiona e modifica recursos por ambiente.Terraform is a third-party tool that provisions and modifies resources per environment. A solução atual provisiona uma pilha de ambiente do serviço de Azure App, o cache do Azure para Redis e o banco de dados SQL do Azure.The current solution provisions an environment stack of Azure App Service, Azure Cache for Redis, and Azure SQL Database.

    O Terraform também dá suporte à configuração de infraestrutura de plataforma cruzada como código e à implantação no Azure e em outros provedores de nuvem.Terraform also supports cross-platform infrastructure-as-code configuration and deployment across Azure and other cloud providers. A infraestrutura como código permite que os desenvolvedores validem as alterações de infraestrutura da mesma forma que validam as alterações de código.Infrastructure-as-code lets developers validate infrastructure changes the same way they validate code changes.

  • Azure app serviço é um serviço de hospedagem na Web totalmente gerenciado para a criação de aplicativos Web.Azure App Service is a fully managed web hosting service for building web apps. O serviço de aplicativo dá suporte a recursos de DevOps como CD, gerenciamento de pacotes, ambientes de preparo, domínios personalizados e certificados TLS/SSL.App Service supports DevOps capabilities like CD, package management, staging environments, custom domains, and TLS/SSL certificates.

  • O cache do Azure para Redis fornece um armazenamento de dados na memória com base no software livre Redis, o que melhora o desempenho e a escalabilidade de aplicativos que dependem muito dos armazenamentos de dados de back-end.Azure Cache for Redis provides an in-memory data store based on the open-source software Redis, which improves performance and scalability of applications that rely heavily on backend data stores.

  • Banco de dados SQL do Azure é um mecanismo de banco de dados PaaS totalmente gerenciado que manipula a maioria das funções de gerenciamento de banco de dados como atualização, aplicação de patches, backups e monitoramento, sem envolvimento do usuário.Azure SQL Database is a fully managed PaaS database engine that handles most database management functions like upgrading, patching, backups, and monitoring, without user involvement.

  • Azure Policy governa os recursos para atender aos padrões organizacionais e à conformidade.Azure Policy governs resources to meet organizational standards and compliance. Em uma função DevTest, Azure Policy pode regular e limitar o número e os custos de VMs.In a DevTest role, Azure Policy can regulate and limit the number and costs of VMs. A auditoria pode fornecer informações e acompanhar o uso das VMs DevTest.Auditing can provide insights and track the usage of the DevTest VMs.

  • Azure monitor pode monitorar ambientes de produção e DevTest.Azure Monitor can monitor both Production and DevTest environments. Azure Monitor pode coletar dados de log de sistemas operacionais de VM e arquivos de despejo de memória e agregá-los para exibição na central de segurança do Azure.Azure Monitor can collect log data from VM operating systems and crash dump files, and aggregate them for viewing in Azure Security Center. Application insights é um recurso do Azure monitor que funciona com o serviço de aplicativo para monitorar o desempenho e os problemas do aplicativo.Application Insights is a feature of Azure Monitor that works with App Service to monitor application performance and issues.

ConsideraçõesConsiderations

O desenvolvimento de um design de banco de dados SQL do Azure que dá suporte adequado ao aplicativo Web é uma consideração importante.Developing an Azure SQL Database design that adequately supports the web app is an important consideration. Controle de origem e versão são tão importantes para esquemas de dados quanto para código e compilações.Source control and versioning are as important for data schemas as for code and builds.

Ferramentas como Entity Framework podem fornecer controle do código-fonte para alterações de esquema de banco de dados por meio de migrações.Tools like Entity Framework can provide source control for database schema changes via migrations. As migrações codificarm alterações na estrutura do banco de dados e fornecem métodos para avançar e reverter alterações se ocorrerem problemas.Migrations codify changes to the database structure and provide methods to both advance forward and roll back changes if issues occur.

AlternativasAlternatives

  • Embora essa arquitetura use Azure Pipelines para implantações, as ações do GitHub também podem executar implantações de PaaS.While this architecture uses Azure Pipelines for deployments, GitHub Actions can also perform PaaS deployments.

  • 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.

  • Embora o Terraform seja uma poderosa ferramenta de gerenciamento de ambiente, um de seus principais recursos é de seus recursos de plataforma cruzada.While Terraform is a powerful environment management tool, one of its main features is its cross-platform capabilities. Para aplicativos que existem somente no Azure, considere o uso de modelos ARM em vez de Terraform para implantações de recursos.For applications that exist solely in Azure, consider using ARM templates instead of Terraform for resource deployments. Os modelos de ARM têm suporte direto da Microsoft, têm suas próprias tarefas no Azure Pipelines e podem ser capazes de implantar recursos ou propriedades que não estão imediatamente disponíveis no Terraform.ARM templates have direct Microsoft support, have their own tasks in Azure Pipelines, and may be able to deploy features or properties that aren't immediately available in Terraform.

Próximas etapasNext steps