Esempio di utilizzo: Distribuzione continua in macchine virtuali tramite Automation DSC e ChocolateyUsage Example: Continuous deployment to Virtual Machines using Automation DSC and Chocolatey

In un ambiente DevOps sono disponibili molti strumenti utili in diversi punti della pipeline di integrazione continua.In a DevOps world there are many tools to assist with various points in the Continuous Integration pipeline. Automation DSC (Desired State Configuration) per Azure è una nuova aggiunta alle opzioni disponibili per i team DevOps.Azure Automation Desired State Configuration (DSC) is a welcome new addition to the options that DevOps teams can employ. Questo articolo illustra come configurare la distribuzione continua per un computer Windows.This article demonstrates setting up Continuous Deployment (CD) for a Windows computer. La tecnica può essere facilmente estesa per includere nel ruolo, ad esempio un sito Web, tutti i computer Windows necessari, estendendola quindi anche ad altri ruoli.You can easily extend the technique to include as many Windows computers as necessary in the role (a web site, for example), and from there to additional roles as well.

Distribuzione continua con VM IaaS

A livello generaleAt a high level

Gli aspetti da considerare sono molteplici, ma possono comunque essere suddivisi in due processi principali:There is quite a bit going on here, but fortunately it can be broken into two main processes:

  • Scrittura di codice e relativo test, quindi creazione e pubblicazione dei pacchetti di installazione per le versioni principale e secondaria del sistema.Writing code and testing it, then creating and publishing installation packages for major and minor versions of the system.
  • Creazione e gestione delle VM che installeranno ed eseguiranno il codice nei pacchetti.Creating and managing VMs that will install and execute the code in the packages.

Dopo l'implementazione di entrambi questi processi di base, si potrà aggiornare automaticamente e in modo rapido il pacchetto in esecuzione in qualsiasi VM specifica, man mano che vengono create e distribuite nuove versioni.Once both of these core processes are in place, it’s a short step to automatically update the package running on any particular VM as new versions are created and deployed.

Panoramica dei componentiComponent overview

Gli strumenti di gestione dei pacchetti, ad esempio apt-get , sono ben noti nell'ambiente Linux, ma non lo sono altrettanto nell'ambiente Windows.Package managers such as apt-get are pretty well known in the Linux world, but not so much in the Windows world. Chocolatey è uno di questi e il blog di Scott Hanselman sull'argomento costituisce un'introduzione molto interessante.Chocolatey is such a thing, and Scott Hanselman’s blog on the topic is a great intro. In breve, Chocolatey consente di installare pacchetti da un repository di pacchetti centrale in un sistema Windows usando la riga di comando.In a nutshell, Chocolatey allows you to install packages from a central repository of packages into a Windows system using the command line. È possibile creare e gestire un repository personalizzato e Chocolatey può installare pacchetti da tutti i repository designati dall'utente.You can create and manage your own repository, and Chocolatey can install packages from any number of repositories that you designate.

DSC (Desired State Configuration) (panoramica) è uno strumento di PowerShell che consente di dichiarare la configurazione che si desidera applicare a un computer.Desired State Configuration (DSC) (overview) is a PowerShell tool that allows you to declare the configuration that you want for a machine. Si può ad esempio dichiarare di voler installare Chocolatey o IIS, di voler aprire la porta 80 e di voler installare la versione 1.0.0 del proprio sito Web.For example, you can say, “I want Chocolatey installed, I want IIS installed, I want port 80 opened, I want version 1.0.0 of my website installed.” Gestione configurazione locale per DSC implementa tale configurazione.The DSC Local Configuration Manager (LCM) implements that configuration. Un server di pull DSC mantiene un repository di configurazioni per i computer dell'utente.A DSC Pull Server holds a repository of configurations for your machines. Gestione configurazione locale in ogni computer controlla periodicamente se la configurazione esistente corrisponde a quella archiviata.The LCM on each machine checks in periodically to see if its configuration matches the stored configuration. Può segnalare lo stato o provare a riallineare il computer con la configurazione archiviata.It can either report status or attempt to bring the machine back into alignment with the stored configuration. È possibile modificare la configurazione archiviata nel server di pull per fare in modo che il computer o un set di computer venga allineato con la configurazione modificata.You can edit the stored configuration on the pull server to cause a machine or set of machines to come into alignment with the changed configuration.

Automazione di Azure è un servizio gestito di Microsoft Azure che consente di automatizzare diverse attività tramite runbook, nodi, credenziali, risorse e asset, ad esempio pianificazioni e variabili globali.Azure Automation is a managed service in Microsoft Azure that allows you to automate various tasks using runbooks, nodes, credentials, resources and assets such as schedules and global variables. Automation DSC per Azure estende questa funzionalità di automazione includendo strumenti DSC di PowerShell.Azure Automation DSC extends this automation capability to include PowerShell DSC tools. Ecco un'interessante panoramica.Here’s a great overview.

Una risorsa DSC è un modulo di codice con funzionalità specifiche, ad esempio per la gestione della rete, di Active Directory o SQL Server.A DSC Resource is a module of code that has specific capabilities, such as managing networking, Active Directory, or SQL Server. La risorsa DSC di Chocolatey riconosce in che modo accedere, tra gli altri, a un server NuGet, scaricare pacchetti, installare pacchetti e così via.The Chocolatey DSC Resource knows how to access a NuGet Server (among others), download packages, install packages, and so on. In PowerShell Gallerysono disponibili numerose altre risorse DSC.There are many other DSC Resources in the PowerShell Gallery. Questi moduli vengono installati dall'utente nel server di pull di Automation DSC per Azure, per poter essere usati nelle configurazioni personalizzate.These modules are installed into your Azure Automation DSC Pull Server (by you) so they can be used by your configurations.

I modelli di Resource Manager offrono un modo dichiarativo per la generazione dell'infrastruttura, ad esempio reti, subnet, routing e sicurezza di rete, servizi di bilanciamento del carico, NIC, VM e così via.Resource Manager templates provide a declarative way of generating your infrastructure - things like networks, subnets, network security and routing, load balancers, NICs, VMs, and so on. Ecco un articolo che confronta il modello di distribuzione (dichiarativo) di Resource Manager con il modello di distribuzione ASM o classica (imperativo) e illustra i principali provider di risorse, calcolo, archiviazione e rete.Here’s an article that compares the Resource Manager deployment model (declarative) with the Azure Service Management (ASM, or classic) deployment model (imperative), and discusses the core resource providers, compute, storage and network.

Una funzionalità chiave di un modello di Resource Manager è la capacità di installare un'estensione VM nella macchina virtuale durante il provisioning.One key feature of an Resource Manager template is its ability to install a VM extension into the VM as it’s provisioned. Un'estensione VM include funzionalità specifiche, come l'esecuzione di uno script personalizzato, l'installazione di software antivirus o l'esecuzione di uno script di configurazione DSC.A VM extension has specific capabilities such as running a custom script, installing anti-virus software, or running a DSC configuration script. Sono disponibili molti altri tipi di estensioni VM.There are many other types of VM extensions.

Descrizione rapida del diagrammaQuick trip around the diagram

A partire dall'alto, si scrive il codice, si compila e si eseguono i test e quindi si crea un pacchetto di installazione.Starting at the top, you write your code, build and test, then create an installation package. Chocolatey può gestire diversi tipi di pacchetti di installazione, ad esempio MSI, MSU, ZIP.Chocolatey can handle various types of installation packages, such as MSI, MSU, ZIP. Se le funzionalità native di Chocolatey non sono del tutto soddisfacenti, si può sempre ricorrere alle potenzialità complete di PowerShell per eseguire l'installazione effettiva.And you have the full power of PowerShell to do the actual installation if Chocolatey’s native capabilities aren’t quite up to it. Inserire il pacchetto in una posizione raggiungibile, come un repository di pacchetti.Put the package into someplace reachable – a package repository. Questo esempio di utilizzo usa una cartella pubblica in un account di archiviazione BLOB di Azure, ma può trovarsi anche in un'altra posizione.This usage example uses a public folder in an Azure blob storage account, but it can be anywhere. Chocolatey funziona in modalità nativa con i server NuGet e alcuni altri per la gestione dei metadati dei pacchetti.Chocolatey works natively with NuGet servers and a few others for management of package metadata. Questo articolo descrive le opzioni.This article describes the options. Questo esempio di utilizzo usa NuGet.This usage example uses NuGet. Nuspec sono i metadati relativi ai pacchetti.A Nuspec is metadata about your packages. I Nuspec vengono "compilati" in NuPkg e archiviati in un server NuGet.The Nuspec’s are “compiled” into NuPkg’s and stored in a NuGet server. Quando la configurazione richiede un pacchetto in base al nome e fa riferimento a un server NuGet, la risorsa DSC di Chocolatey, che ora si trova nella VM, estrae il pacchetto e lo installa automaticamente.When your configuration requests a package by name, and references a NuGet server, the Chocolatey DSC Resource (now on the VM) grabs the package and installs it for you. È anche possibile richiedere una versione specifica di un pacchetto.You can also request a specific version of a package.

Nella parte in basso dell'immagine è presente un modello di Gestione risorse di Azure.In the bottom left portion of the picture, there is an Azure Resource Manager (ARM) template. In questo esempio di utilizzo, l'estensione VM registra la macchina virtuale con il server di pull di Automation DSC per Azure come nodo.In this usage example, the VM extension registers the VM with the Azure Automation DSC Pull Server (that is, a pull server) as a Node. La configurazione viene archiviata nel server di pull.The configuration is stored in the pull server. In realtà viene archiviata due volte, cioè una volta come testo normale e una volta compilata come file MOF, un'indicazione per coloro che hanno familiarità con questi elementi. Nel portale il file MOF è una "configurazione di nodi", invece di una semplice "configurazione".Actually, it’s stored twice: once as plain text and once compiled as an MOF file (for those that know about such things.) In the portal, the MOF is a “node configuration” (as opposed to simply “configuration”). Poiché l'artefatto è associato a un nodo, quest'ultimo riconoscerà la propria configurazione.It’s the artifact that’s associated with a Node so the node will know its configuration. I dettagli che seguono illustrano come assegnare la configurazione di nodi al nodo.Details below show how to assign the node configuration to the node.

È probabile che ci si stia già occupando della sezione iniziale o la maggior parte di essa.Presumably you’re already doing the bit at the top, or most of it. La creazione del Nuspec, la relativa compilazione e archiviazione in un server NuGet non è un'operazione impegnativaCreating the nuspec, compiling and storing it in a NuGet server is a small thing. e si stanno già gestendo le VM.And you’re already managing VMs. L'esecuzione del passaggio successivo della distribuzione continua richiede la configurazione del server di pull (una volta), la registrazione dei nodi con il server (una volta) e la creazione e archiviazione della configurazione nel server (inizialmente).Taking the next step to continuous deployment requires setting up the pull server (once), registering your nodes with it (once), and creating and storing the configuration there (initially). In seguito, man mano che i pacchetti vengono aggiornati e distribuiti nel repository, aggiornare la configurazione e la configurazione di nodi nel server di pull, ripetendola se necessario.Then as packages are upgraded and deployed to the repository, refresh the Configuration and Node Configuration in the pull server (repeat as needed).

Il procedimento funziona anche se non si inizia con un modello ARM.If you’re not starting with an ARM template, that’s also OK. Sono disponibili cmdlet di PowerShell progettati per facilitare la registrazione delle VM con il server di pull e tutto il resto.There are PowerShell cmdlets designed to help you register your VMs with the pull server and all of the rest. Per altre informazioni dettagliate, vedere l'articolo Caricamento di computer per la gestione con Automation DSC per AzureFor more details, see this article: Onboarding machines for management by Azure Automation DSC

Passaggio 1: Configurazione del server di pull e dell'account di automazioneStep 1: Setting up the pull server and automation account

Da una riga di comando di PowerShell (Add-AzureRmAccount) autenticata (la configurazione del server di pull può richiedere alcuni minuti):At an authenticated (Add-AzureRmAccount) PowerShell command line: (can take a few minutes while the pull server is set up)

New-AzureRmResourceGroup –Name MY-AUTOMATION-RG –Location MY-RG-LOCATION-IN-QUOTES
New-AzureRmAutomationAccount –ResourceGroupName MY-AUTOMATION-RG –Location MY-RG-LOCATION-IN-QUOTES –Name MY-AUTOMATION-ACCOUNT 

È possibile inserire l'account di automazione in una qualsiasi delle aree seguenti (dette anche località): Stati Uniti orientali 2, Stati Uniti centro-meridionali, US Gov Virginia, Europa occidentale, Asia sud-orientale, Giappone orientale, India centrale e Australia sud-orientale, Canada centrale ed Europa settentrionale.You can put your automation account into any of the following regions (aka location): East US 2, South Central US, US Gov Virginia, West Europe, Southeast Asia, Japan East, Central India and Australia Southeast, Canada Central, North Europe.

Passaggio 2: Modifiche dell'estensione VM nel modello ARMStep 2: VM extension tweaks to the ARM template

I dettagli per la registrazione della VM, usando l'estensione VM di PowerShell DSC, sono disponibili in questo modello di avvio rapido di Azure.Details for VM registration (using the PowerShell DSC VM extension) provided in this Azure Quickstart Template. Questo passaggio registra la nuova VM con il server di pull nell'elenco di nodi DSC.This step registers your new VM with the pull server in the list of DSC Nodes. Parte di tale registrazione consiste nella specifica della configurazione da applicare ai nodi.Part of this registration is specifying the node configuration to be applied to the node. Questa configurazione di nodi non deve essere già presente nel server di pull e questa operazione può quindi essere eseguita per la prima volta nel passaggio 4.This node configuration doesn't have to exist yet in the pull server, so it's OK that Step 4 is where this is done for the first time. In questo passaggio 2 è tuttavia necessario definire il nome del nodo e della configurazione.But here in Step 2 you do need to have decided the name of the node and the name of the configuration. In questo esempio di utilizzo, il nodo è 'isvbox' e la configurazione è 'ISVBoxConfig'.In this usage example, the node is 'isvbox' and the configuration is 'ISVBoxConfig'. Pertanto il nome della configurazione di nodi da specificare in DeploymentTemplate.json è 'ISVBoxConfig.isvbox'.So the node configuration name (to be specified in DeploymentTemplate.json) is 'ISVBoxConfig.isvbox'.

Passaggio 3: Aggiunta delle risorse DSC necessarie al server di pullStep 3: Adding required DSC resources to the pull server

PowerShell Gallery è instrumentata per l'installazione delle risorse DSC nell'account di Automazione di Azure.The PowerShell Gallery is instrumented to install DSC resources into your Azure Automation account. Passare alla risorsa desiderata e fare clic sul pulsante "Deploy to Azure Automation".Navigate to the resource you want and click the “Deploy to Azure Automation” button.

Esempio di PowerShell Gallery

Un'altra tecnica aggiunta di recente al portale di Azure consente di inserire nuovi moduli o aggiornare quelli esistenti.Another technique recently added to the Azure Portal allows you to pull in new modules or update existing modules. Fare clic sulla risorsa Account di automazione, sul riquadro Asset e infine sul riquadro Moduli.Click through the Automation Account resource, the Assets tile, and finally the Modules tile. L'icona Esplora raccolta consente di visualizzare l'elenco dei moduli nella raccolta, eseguire il drill-down dei dettagli e infine di eseguire l'importazione in Account di automazione.The Browse Gallery icon allows you to see the list of modules in the gallery, drill down into details and ultimately import into your Automation Account. Questo è un ottimo modo per mantenere aggiornati i moduli periodicamente.This is a great way to keep your modules up to date from time to time. La funzionalità di importazione verifica le dipendenze con altri moduli per garantire che rimangano sincronizzati.And, the import feature checks dependencies with other modules to ensure nothing gets out of sync.

In alternativa, è disponibile l'approccio manuale.Or, there’s the manual approach. La struttura di cartelle di un modulo di integrazione di PowerShell per un computer Windows è leggermente diversa da quella prevista da Automation DSC per Azure,The folder structure of a PowerShell Integration Module for a Windows computer is a little different from the folder structure expected by the Azure Automation. perciò richiede alcune modifiche da parte dell'utente.This requires a little tweaking on your part. Non è un'operazione difficile e viene eseguita una sola volta per risorsa, a meno che non si voglia aggiornarla in futuro. Per altre informazioni sulla creazione di moduli di integrazione di PowerShell, vedere l'articolo relativo alla creazione di moduli di integrazione per Automazione di AzureBut it’s not hard, and it’s done only once per resource (unless you want to upgrade it in future.) For more information on authoring PowerShell Integration Modules, see this article: Authoring Integration Modules for Azure Automation

  • Installare il modulo necessario nella workstation, come indicato di seguito:Install the module that you need on your workstation, as follows:
  • Copiare la cartella del modulo da c:\Program Files\WindowsPowerShell\Modules\MODULE-NAME in una cartella temporanea.Copy the module folder from c:\Program Files\WindowsPowerShell\Modules\MODULE-NAME to a temp folder
  • Eliminare esempi e documentazione dalla cartella principale.Delete samples and documentation from the main folder
  • Comprimere la cartella principale e denominare il file ZIP esattamente come la cartella.Zip the main folder, naming the ZIP file exactly the same as the folder
  • Inserire il file ZIP in una posizione HTTP raggiungibile, ad esempio l'archivio BLOB in un account di archiviazione di Azure.Put the ZIP file into a reachable HTTP location, such as blob storage in an Azure Storage Account.
  • Eseguire questo comando di PowerShell:Run this PowerShell:

    New-AzureRmAutomationModule `
        -ResourceGroupName MY-AUTOMATION-RG -AutomationAccountName MY-AUTOMATION-ACCOUNT `
        -Name MODULE-NAME –ContentLink "https://STORAGE-URI/CONTAINERNAME/MODULE-NAME.zip"
    

L'esempio incluso esegue questi passaggi per cChoco e xNetworking.The included example performs these steps for cChoco and xNetworking. Per informazioni sulla gestione specifica di cChoco, vedere le note .See the Notes for special handling for cChoco.

Passaggio 4: Aggiunta della configurazione di nodi al server di pullStep 4: Adding the node configuration to the pull server

Non è necessario eseguire operazioni speciali la prima volta che si importa la configurazione nel server di pull e si procede alla compilazione.There’s nothing special about the first time you import your configuration into the pull server and compile. Tutte le importazioni/compilazioni successive della stessa configurazione avranno esattamente lo stesso aspetto.All subsequent import/compiles of the same configuration look exactly the same. Ogni volta che si aggiorna il pacchetto ed è necessario effettuarne il push all'ambiente di produzione, si eseguirà questo passaggio dopo avere verificato che il file di configurazione è corretto, inclusa la nuova versione del pacchetto.Each time you update your package and need to push it out to production you do this step after ensuring the configuration file is correct – including the new version of your package. Ecco il file di configurazione e PowerShell:Here’s the configuration file and PowerShell:

ISVBoxConfig.ps1:ISVBoxConfig.ps1:

Configuration ISVBoxConfig 
{ 
    Import-DscResource -ModuleName cChoco 
    Import-DscResource -ModuleName xNetworking

    Node "isvbox" {   

        cChocoInstaller installChoco 
        { 
            InstallDir = "C:\choco" 
        }

        WindowsFeature installIIS 
        { 
            Ensure="Present" 
            Name="Web-Server" 
        }

        xFirewall WebFirewallRule 
        { 
            Direction = "Inbound" 
            Name = "Web-Server-TCP-In" 
            DisplayName = "Web Server (TCP-In)" 
            Description = "IIS allow incoming web site traffic." 
            DisplayGroup = "IIS Incoming Traffic" 
            State = "Enabled" 
            Access = "Allow" 
            Protocol = "TCP" 
            LocalPort = "80" 
            Ensure = "Present" 
        }

        cChocoPackageInstaller trivialWeb 
        {            
            Name = "trivialweb" 
            Version = "1.0.0" 
            Source = “MY-NUGET-V2-SERVER-ADDRESS” 
            DependsOn = "[cChocoInstaller]installChoco", 
            "[WindowsFeature]installIIS" 
        } 
    }    
}

New-ConfigurationScript.ps1:New-ConfigurationScript.ps1:

Import-AzureRmAutomationDscConfiguration ` 
    -ResourceGroupName MY-AUTOMATION-RG –AutomationAccountName MY-AUTOMATION-ACCOUNT ` 
    -SourcePath C:\temp\AzureAutomationDsc\ISVBoxConfig.ps1 ` 
    -Published –Force

$jobData = Start-AzureRmAutomationDscCompilationJob ` 
    -ResourceGroupName MY-AUTOMATION-RG –AutomationAccountName MY-AUTOMATION-ACCOUNT ` 
    -ConfigurationName ISVBoxConfig 

$compilationJobId = $jobData.Id

Get-AzureRmAutomationDscCompilationJob ` 
    -ResourceGroupName MY-AUTOMATION-RG –AutomationAccountName MY-AUTOMATION-ACCOUNT ` 
    -Id $compilationJobId

Questi passaggi generano una nuova configurazione di nodi denominata "ISVBoxConfig.isvbox" che viene posizionata nel server di pull.These steps result in a new node configuration named “ISVBoxConfig.isvbox” being placed on the pull server. Il nome della configurazione di nodi viene compilato come "configurationName.nodeName".The node configuration name is built as “configurationName.nodeName”.

Passaggio 5: Creazione e gestione dei metadati del pacchettoStep 5: Creating and maintaining package metadata

Per ogni pacchetto inserito nel repository di pacchetti, è necessario un Nuspec che lo descriva.For each package that you put into the package repository, you need a nuspec that describes it. Questo Nuspec deve essere compilato e archiviato nel server NuGet.That nuspec must be compiled and stored in your NuGet server. Questo processo è descritto qui.This process is described here. È possibile usare MyGet.org come server NuGet.You can use MyGet.org as a NuGet server. Il servizio è a pagamento, ma viene offerto gratuitamente uno SKU di avvio.They sell this service, but have a starter SKU that’s free. In NuGet.org sono disponibili istruzioni sull'installazione di un server NuGet personalizzato per i pacchetti privati.At NuGet.org you’ll find instructions on installing your own NuGet server for your private packages.

Passaggio 6: Verifica di tutti gli elementiStep 6: Tying it all together

Ogni volta che una versione passa il controllo di qualità e viene approvata per la distribuzione, viene creato il pacchetto e Nuspec e Nupkg vengono aggiornati e distribuiti nel server NuGet.Each time a version passes QA and is approved for deployment, the package is created, nuspec and nupkg updated and deployed to the NuGet server. Inoltre, la configurazione illustrata nel passaggio 4 deve essere aggiornata, per essere conforme al nuovo numero di versione,In addition, the configuration (Step 4 above) must be updated to agree with the new version number. e deve essere inviata al server di pull per la compilazione.It must be sent to the pull server and compiled. A questo punto, le macchine virtuali che dipendono da tale configurazione devono effettuare l'aggiornamento e installarlo.From that point on, it's up to the VMs that depend on that configuration to pull the update and install it. Questi aggiornamenti sono semplici: solo una o due righe di PowerShell.Each of these updates are simple - just a line or two of PowerShell. Nel caso di Visual Studio Team Services, alcuni aggiornamenti vengono incapsulati in attività di compilazione che possono essere concatenate in una compilazione.In the case of Visual Studio Team Services, some of them are encapsulated in build tasks that can be chained together in a build. Per altre informazioni dettagliate, vedere questo articolo.This article provides more details. Questo repository GitHub descrive le varie attività di compilazione disponibili.This GitHub repo details the various available build tasks.

NoteNotes

Questo esempio di uso inizia con una VM da un'immagine generica di Windows 2012 R2 disponibile nella raccolta di Azure.This usage example starts with a VM from a generic Windows Server 2012 R2 image from the Azure gallery. È possibile iniziare da qualsiasi immagine archiviata e usarla come base per modificare la configurazione DSC.You can start from any stored image and then tweak from there with the DSC configuration. La modifica della configurazione basata su un'immagine è tuttavia molto più complessa rispetto all'aggiornamento dinamico della configurazione mediante DSC.However, changing configuration that is baked into an image is much harder than dynamically updating the configuration using DSC.

Non è necessario usare un modello ARM e l'estensione VM per usare questa tecnica con le proprie VM.You don’t have to use an ARM template and the VM extension to use this technique with your VMs. Inoltre, le VM non devono trovarsi necessariamente in Azure per la gestione della distribuzione continua.And your VMs don’t have to be on Azure to be under CD management. È solo necessario che Chocolatey sia installato e che Gestione configurazione locale sia configurato nella VM perché riconosca la posizione del server di pull.All that’s necessary is that Chocolatey be installed and the LCM configured on the VM so it knows where the pull server is.

Naturalmente, quando si aggiorna un pacchetto in una VM in produzione, è necessario escluderla dalla rotazione mentre viene installato l'aggiornamento.Of course, when you update a package on a VM that’s in production, you need to take that VM out of rotation while the update is installed. La procedura per eseguire questa operazione varia ampiamente.How you do this varies widely. Ad esempio, per una VM con bilanciamento del carico di Azure è possibile aggiungere un probe personalizzato.For example, with a VM behind an Azure Load Balancer, you can add a Custom Probe. Durante l'aggiornamento della VM, l'endpoint del probe dovrà restituire un messaggio 400.While updating the VM, have the probe endpoint return a 400. La modifica necessaria per ottenere questo cambiamento può essere eseguita nella configurazione, così come può esserlo la modifica per ripristinare la restituzione di un messaggio 200 una volta completato l'aggiornamento.The tweak necessary to cause this change can be inside your configuration, as can the tweak to switch it back to returning a 200 once the update is complete.

Il codice sorgente completo per questo esempio di utilizzo si trova in questo progetto di Visual Studio su GitHub.Full source for this usage example is in this Visual Studio project on GitHub.