DevTest e DevOps per soluzioni PaaS

Boards
Azure DevOps
Pipelines
GitHub

In cloud computing di piattaforma distribuita come servizio (PaaS) , un provider di servizi offre una piattaforma che consente ai client di sviluppare, eseguire e gestire le applicazioni senza dover creare e gestire l'infrastruttura.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. Lo sviluppo di soluzioni basato su risorse e servizi della piattaforma Azure consente di rimuovere il sovraccarico della gestione di macchine virtuali, reti virtuali, dischi e configurazioni correlate.Solution development based on Azure Platform resources and services removes the overhead of managing virtual machines, virtual networks, disks, and related configurations.

Il test di sviluppo (DevTest) è un approccio di sviluppo software che integra i test nelle fasi iniziali della fase di sviluppo.Development testing (DevTest) is a software development approach that integrates testing early in the development phase. DevOps è un set di procedure che combinano lo sviluppo software e le operazioni IT, per abbreviare il ciclo di sviluppo e fornire il recapito continuo con qualità elevata.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.

Questa architettura della soluzione combina un sovraccarico ridotto e una DevOps per supportare cicli di iterazione DevTest rapidi e un ambiente di sviluppo rapido con risorse 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.

ArchitectureArchitecture

Diagramma che mostra la configurazione di DevTest e DevOps per un'applicazione PaaS.

  1. Gli sviluppatori usano gli ambienti di sviluppo preconfigurati di GitHub codespaces per evitare di configurare manualmente gli ambienti di sviluppo.Developers use GitHub Codespaces pre-configured development environments to avoid manually configuring development environments. Gli sviluppatori possono usare gli spazi dei nomi nel browser o tramite Visual Studio Code.Developers can use Codespaces in-browser or through Visual Studio Code.

  2. Il codice sorgente è disponibile nei repository GitHub , che si integrano facilmente con Azure DevOps.Source code is available in GitHub repos, which integrate seamlessly with Azure DevOps.

  3. Analogamente ad Azure DevOps, le azioni di GitHub consentono di impostare compilazioni automatiche da attivare su commit o richieste pull di GitHub.Similar to Azure DevOps, GitHub Actions sets automated builds to trigger on GitHub commits or pull requests. Nella soluzione corrente, l'azione di compilazione pubblica gli artefatti in un pacchetto di origine del pacchetto GitHub per la distribuzione.In the current solution, the build action publishes artifacts to a GitHub Package source package for deployment.

  4. Azure Boards si connette nuovamente ai repository GitHub per generare elementi di lavoro da test automatizzati e manuali e tiene traccia di tutto il lavoro nel ciclo di sviluppo.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. Gli sviluppatori creano i rami funzionalità o correggi che associano elementi di lavoro con Sprint o cicli di sviluppo, monitorando tutto il codice con attività e requisiti.Developers create feature or fix branches that associate work items with development sprints or cycles, tracking all code with tasks and requirements. Con questo approccio, gli sviluppatori mantengono una velocità di ciclo di sviluppo attiva cruciale per Agile Software Development.With this approach, developers maintain an active development loop velocity that is critical to agile software development.

  6. Azure Pipelines è la soluzione per le distribuzioni PaaS di Azure.Azure Pipelines is the solution for Azure PaaS deployments. Azure Pipelines gestisce la distribuzione continua (CD) e le attività di rilascio, che utilizzano le versioni dei pacchetti esposte dalle compilazioni di azioni di GitHub.Azure Pipelines handles continuous deployment (CD) and release tasks, which consume the package versions exposed by GitHub Actions builds. Azure Pipelines utilizza Azure Key Vault per utilizzare in modo sicuro i segreti, ad esempio le credenziali e le stringhe di connessione necessarie per le configurazioni di distribuzione e di rilascio.Azure Pipelines uses Azure Key Vault to securely consume secrets like credentials and connection strings required for release and deployment configurations.

  7. Azure Pipelines attività di distribuzione supportano specificamente le risorse PaaS di Azure, incluse le distribuzioni di applicazioni Web:Azure Pipelines deployment tasks specifically support Azure PaaS resources, including web application deployments:

    1. Insieme alle compilazioni continue dalle azioni di GitHub, una versione continua distribuisce la build dell'applicazione più recente in un ambiente di sviluppo.In conjunction with the continuous builds from GitHub Actions, a continuous release deploys the latest application build to a Development environment.
    2. La pipeline promuove la compilazione selezionata per eseguire il test fino all'anello di distribuzione successivo, ovvero l'ambiente di test.The pipeline promotes the build selected for testing up to the next deployment ring, the Test environment.
    3. Dopo che la compilazione ha superato tutti i test, quest'ultima viene innalzata di livello e posizionata nell'anello esterno successivo per i test di accettazione degli utenti (UAT).After the build passes all tests, it's promoted and staged in the next outer ring for User Acceptance Testing (UAT).

    Tutti e tre gli ambienti DevTest sono disponibili con una sottoscrizione di Azure DevTestcon costi scontati.All three DevTest environments exist under a discounted-cost Azure DevTest Subscription. Criteri di Azure può aggiungere regole aggiuntive per la dimensione e il numero di servizi app o database PaaS per limitare i costi.Azure Policy can add additional rules for the size and number of App Services or PaaS databases to limit costs.

  8. Quando la qualità della soluzione raggiunge uno stato di produzione, Azure Pipelines attiva una versione di produzione.When solution quality reaches a Production state, Azure Pipelines triggers a Production release. La pipeline limita le distribuzioni di produzione al numero minimo necessario.The pipeline limits Production deployments to the minimum number necessary.

    Per un servizio app, una versione di pipeline può distribuire la versione di build di destinazione alla risorsa di produzione nello slot dell'app di pre-produzione e quindi scambiare gli slot per la produzione sul posto.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 si verificano problemi durante lo scambio di pre-produzione in produzione, il servizio app può eseguire il rollback dello scambio per garantire una maggiore sicurezza della distribuzione.If something goes wrong during the swap of Pre-Production to Production, App Service can roll back the swap for extra deployment safety.

In questa soluzione, un singolo Azure Active Directory (Azure ad) gestisce l'identità per le sottoscrizioni DevTest e Production.In this solution, a single Azure Active Directory (Azure AD) manages identity for both the DevTest and Production subscriptions. Il controllo degli accessi in base al ruolo di Azure (RBAC di Azure) limita l'accesso alle risorse protette, impedendo modifiche non autorizzate o accidentali delle risorse di produzione.Azure role-based access control (Azure RBAC) restricts access to protected resources, preventing unauthorized or inadvertent modification of Production resources. Gli sviluppatori non hanno gli stessi livelli di controllo di accesso in produzione come nei sandbox DevTest.Developers don't have the same access control levels in Production as in their DevTest sandboxes.

La bonifica provisioning e modifica le risorse per ogni ambiente, dimensioni personalizzate, numero di istanze e altre proprietà.Terraform provisions and modifies resources for each environment, tailoring size, instance count, and other properties. La soluzione corrente modella uno stack di ambienti di app Azure servizio, cache di Azure per Redis e database SQL di Azure.The current solution models an environment stack of Azure App Service, Azure Cache for Redis, and Azure SQL Database.

Monitoraggio di Azure funziona tra le sottoscrizioni per monitorare tutti gli ambienti e raccogliere log, report di dump di arresto anomalo del sistema e dati dell'applicazione.Azure Monitor works across subscriptions to monitor all environments and collect logs, crash dump reports, and application data.

ComponentiComponents

  • GitHub è una piattaforma di hosting del codice per il controllo della versione e la collaborazione con altre funzionalità integrate:GitHub is a code hosting platform for version control and collaboration, with other integrated features:

    • Un repository di controllo del codice sorgente github contiene tutti i file di progetto e la cronologia delle revisioni.A GitHub source-control repository contains all project files and their revision history. Gli sviluppatori possono collaborare per contribuire, discutere e gestire il codice nel repository.Developers can work together to contribute, discuss, and manage code in the repository.
    • Gli spazi dei nomi di GitHub forniscono agli sviluppatori ambienti di sviluppo preconfigurati che coprono dipendenze della libreria, configurazione utente ed estensioni.GitHub Codespaces provide developers with pre-configured development environments that cover library dependencies, user configuration, and extensions. Gli sviluppatori possono eseguire il provisioning di spazi dei nomi in GitHub e usarli nel browser o tramite Visual Studio Code.Developers can provision codespaces in GitHub, and use them either in-browser or through Visual Studio Code.
    • Le azioni di GitHub forniscono una suite di flussi di lavoro di compilazione e rilascio, che coprono l'integrazione continua (ci), i test automatizzati e le distribuzioni di contenitori o modelli di 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.
    • Pacchetti GitHub il servizio di hosting consente di ospitare i pacchetti software e di usarli come dipendenze nei progetti.GitHub Packages package hosting service allows hosting software packages and using them as dependencies in projects.
  • Azure Boards è un servizio per la gestione del lavoro per i progetti software.Azure Boards is a service for managing work for software projects. Azure Boards offre un set completo di funzionalità, tra cui il supporto nativo per le metodologie Scrum e Kanban, i dashboard personalizzabili e la creazione di report integrati.Azure Boards brings a rich set of capabilities including native support for Scrum and Kanban methodologies, customizable dashboards, and integrated reporting.

  • Azure Pipelines distribuisce le immagini dell'applicazione VM.Azure Pipelines deploys the VM application images. Le pipeline possono anche distribuire le risorse della macchina virtuale, tramite i modelli di Azure Resource Manager (ARM).Pipelines can also deploy the VM resources themselves, through Azure Resource Manager (ARM) templates. Questa infrastruttura come codice può essere controllata dal codice sorgente e configurata per ci/CD, assicurando che l'infrastruttura rimanga aggiornata.This infrastructure-as-code can be source controlled and configured for CI/CD, ensuring that the infrastructure remains up to date.

  • Azure Key Vault archivia in modo sicuro e controlla rigorosamente l'accesso a segreti quali chiavi API, password e certificati.Azure Key Vault securely stores and tightly controls access to secrets like API keys, passwords, and certificates. Per altre informazioni sulle Key Vault negli scenari DevOps, vedere DevSecOps in Azure e DevSecOps in GitHub.For more information about Key Vault in DevOps scenarios, see DevSecOps in Azure and DevSecOps in GitHub.

  • Azure ad piattaforma di identità aziendale fornisce l'autenticazione a più fattori e Single Sign-on per gestire l'accesso degli utenti alle risorse.Azure AD enterprise identity platform provides single sign-on and multifactor authentication to govern user access to resources. Nello scenario corrente Azure AD usa il controllo degli accessi in base al ruolo di Azure per limitare l'accesso per ogni ambiente.In the current scenario, Azure AD works with Azure RBAC to restrict access per environment.

  • La bonifica è uno strumento di terze parti che effettua il provisioning e modifica le risorse per ogni ambiente.Terraform is a third-party tool that provisions and modifies resources per environment. La soluzione corrente effettua il provisioning di uno stack di ambienti di app Azure servizio, cache di Azure per Redis e database SQL di Azure.The current solution provisions an environment stack of Azure App Service, Azure Cache for Redis, and Azure SQL Database.

    La bonifica supporta anche la configurazione e la distribuzione con infrastruttura come codice multipiattaforma in Azure e in altri provider di servizi cloud.Terraform also supports cross-platform infrastructure-as-code configuration and deployment across Azure and other cloud providers. L'infrastruttura come codice consente agli sviluppatori di convalidare le modifiche dell'infrastruttura nello stesso modo in cui convalidano le modifiche del codiceInfrastructure-as-code lets developers validate infrastructure changes the same way they validate code changes.

  • App Azure servizio è un servizio di hosting Web completamente gestito per la creazione di app Web.Azure App Service is a fully managed web hosting service for building web apps. Il servizio app supporta funzionalità DevOps, ad esempio CD, gestione pacchetti, ambienti di staging, domini personalizzati e certificati TLS/SSL.App Service supports DevOps capabilities like CD, package management, staging environments, custom domains, and TLS/SSL certificates.

  • Cache di Azure per Redis offre un archivio dati in memoria basato sul software Redis open source, che migliora le prestazioni e la scalabilità di applicazioni che si basano molto sugli archivi dati 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.

  • Il database SQL di Azure è un motore di database PaaS completamente gestito che gestisce la maggior parte delle funzioni di gestione del database, ad esempio l'aggiornamento, l'applicazione di patch, i backup e il monitoraggio, senza coinvolgimento degli utentiAzure SQL Database is a fully managed PaaS database engine that handles most database management functions like upgrading, patching, backups, and monitoring, without user involvement.

  • Criteri di Azure gestisce le risorse per soddisfare gli standard e la conformità dell'organizzazione.Azure Policy governs resources to meet organizational standards and compliance. In un ruolo DevTest, i criteri di Azure possono regolare e limitare il numero e i costi delle macchine virtuali.In a DevTest role, Azure Policy can regulate and limit the number and costs of VMs. Il controllo può fornire informazioni dettagliate e tenere traccia dell'utilizzo delle macchine virtuali DevTest.Auditing can provide insights and track the usage of the DevTest VMs.

  • Monitoraggio di Azure consente di monitorare gli ambienti di produzione e DevTest.Azure Monitor can monitor both Production and DevTest environments. Monitoraggio di Azure può raccogliere dati di log da sistemi operativi VM e file di dump di arresto anomalo del sistema e aggregarli per la visualizzazione nel Centro sicurezza di 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 è una funzionalità di monitoraggio di Azure che funziona con il servizio app per monitorare le prestazioni e i problemi dell'applicazione.Application Insights is a feature of Azure Monitor that works with App Service to monitor application performance and issues.

ConsiderazioniConsiderations

Lo sviluppo di un progetto di database SQL di Azure che supporti adeguatamente l'app Web è una considerazione importante.Developing an Azure SQL Database design that adequately supports the web app is an important consideration. Il controllo del codice sorgente e il controllo delle versioni sono importanti per gli schemi di dati come per il codice e le compilazioni.Source control and versioning are as important for data schemas as for code and builds.

Strumenti come Entity Framework possono fornire il controllo del codice sorgente per le modifiche dello schema del database tramite migrazioni.Tools like Entity Framework can provide source control for database schema changes via migrations. Le migrazioni codificano le modifiche apportate alla struttura del database e forniscono metodi per avanzare ed eseguire il rollback delle modifiche se si verificano problemi.Migrations codify changes to the database structure and provide methods to both advance forward and roll back changes if issues occur.

AlternativiAlternatives

  • Sebbene questa architettura usi Azure Pipelines per le distribuzioni, le azioni di GitHub possono anche eseguire distribuzioni PaaS.While this architecture uses Azure Pipelines for deployments, GitHub Actions can also perform PaaS deployments.

  • Alcune integrazioni disponibili in Azure Pipelines, ad esempio la connessione del servizio o l'autenticazione direttamente nel backbone di Azure, non sono attualmente presenti nelle azioni di 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. Per queste esigenze, provare a usare Azure Pipelines invece delle azioni di GitHub per CI e le attività di compilazione.For these needs, consider using Azure Pipelines instead of GitHub Actions for CI and build activities.

  • Mentre la bonifica è uno strumento di gestione dell'ambiente potente, una delle sue funzionalità principali è rappresentata dalle funzionalità multipiattaforma.While Terraform is a powerful environment management tool, one of its main features is its cross-platform capabilities. Per le applicazioni esistenti esclusivamente in Azure, è consigliabile usare i modelli ARM anziché il bonifica per le distribuzioni di risorse.For applications that exist solely in Azure, consider using ARM templates instead of Terraform for resource deployments. I modelli ARM hanno un supporto Microsoft diretto, hanno le proprie attività in Azure Pipelines e possono essere in grado di distribuire funzionalità o proprietà che non sono immediatamente disponibili per la bonifica.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.

Passaggi successiviNext steps