Doorlopende implementatie instellen met Chocolatey

Notitie

Voordat u Automation State Configuration inschakelt, willen we graag weten dat een nieuwere versie van DSC nu algemeen beschikbaar is, beheerd door een functie van Azure Policy met de naam gastconfiguratie. De gastconfiguratieservice combineert functies van DSC-extensie, Azure Automation State Configuration en de meest aangevraagde functies uit feedback van klanten. Gastconfiguratie omvat ook ondersteuning voor hybride machines via servers met Arc.

In een DevOps-wereld zijn er veel hulpprogramma's om te helpen met verschillende punten in de pijplijn voor continue integratie. Azure Automation State Configuration is een welkome nieuwe toevoeging aan de opties die DevOps-teams kunnen gebruiken.

Azure Automation is een beheerde service in Microsoft Azure waarmee u verschillende taken kunt automatiseren met runbooks, knooppunten en gedeelde resources, zoals referenties, planningen en globale variabelen. Azure Automation State Configuration breidt deze automatiseringsmogelijkheid uit met dsc-hulpprogramma's (PowerShell Desired State Configuration). Hier is een goed overzicht.

In dit artikel wordt beschreven hoe u continue implementatie (CD) instelt voor een Windows-computer. U kunt de techniek eenvoudig uitbreiden om zoveel Windows-computers op te nemen als nodig is in de rol, bijvoorbeeld een website, en van daaruit naar aanvullende rollen gaan.

Continuous Deployment for IaaS VMs

Op hoog niveau

Er is hier nogal wat aan de hand, maar gelukkig kan het worden opgesplitst in twee hoofdprocessen:

  • Code schrijven en testen en vervolgens installatiepakketten maken en publiceren voor primaire en secundaire versies van het systeem.
  • Virtuele machines maken en beheren die de code in de pakketten installeren en uitvoeren.

Zodra beide kernprocessen zijn geïmplementeerd, is het eenvoudig om het pakket automatisch bij te werken op uw VM's wanneer er nieuwe versies worden gemaakt en geïmplementeerd.

Overzicht van onderdelen

Pakketbeheerders zoals apt-get zijn bekend in de Linux-wereld, maar niet zozeer in de Windows-wereld. Chocolatey is zoiets, en scott Hanselman's blog over het onderwerp is een geweldige inleiding. In een notendop kunt u met Chocolatey de opdrachtregel gebruiken om pakketten vanuit een centrale opslagplaats op een Windows-besturingssysteem te installeren. U kunt uw eigen opslagplaats maken en beheren en Chocolatey kan pakketten installeren vanuit een willekeurig aantal opslagplaatsen dat u aanwijst.

PowerShell DSC is een PowerShell-hulpprogramma waarmee u de gewenste configuratie voor een computer kunt declareren. Als u bijvoorbeeld Chocolatey wilt installeren, iis geïnstalleerd, poort 80 geopend en versie 1.0.0 van uw website geïnstalleerd, implementeert de DSC Local Configuration Manager (LCM) die configuratie. Een DSC-pull-server bevat een opslagplaats met configuraties voor uw machines. De LCM op elke computer controleert regelmatig of de configuratie overeenkomt met de opgeslagen configuratie. Het kan de status rapporteren of proberen de machine weer in overeenstemming te brengen met de opgeslagen configuratie. U kunt de opgeslagen configuratie op de pull-server bewerken zodat een machine of set computers in overeenstemming komt met de gewijzigde configuratie.

Een DSC-resource is een codemodule met specifieke mogelijkheden, zoals netwerken, Active Directory of SQL Server beheren. De Chocolatey DSC-resource weet hoe ze toegang hebben tot een NuGet-server (onder andere), pakketten downloaden, pakketten installeren, enzovoort. Er zijn veel andere DSC-resources in de PowerShell Gallery. U installeert deze modules op uw Pull-server van Azure Automation State Configuration voor gebruik door uw configuraties.

Resource Manager-sjablonen bieden een declaratieve manier om uw infrastructuur te genereren, bijvoorbeeld netwerken, subnetten, netwerkbeveiliging en routering, load balancers, NIC's, VM's enzovoort. Hier volgt een artikel waarin het Resource Manager-implementatiemodel (declaratief) wordt vergeleken met het Azure Service Management-implementatiemodel (ASM of klassiek) (imperatief). Dit artikel bevat een bespreking van de belangrijkste resourceproviders: compute, opslag en netwerk.

Een belangrijke functie van een Resource Manager-sjabloon is de mogelijkheid om een VM-extensie in de VIRTUELE machine te installeren terwijl deze is ingericht. Een VM-extensie heeft specifieke mogelijkheden, zoals het uitvoeren van een aangepast script, het installeren van antivirussoftware en het uitvoeren van een DSC-configuratiescript. Er zijn veel andere typen VM-extensies.

Snelle reis rond het diagram

Vanaf het begin schrijft u uw code, bouwt u deze, test u deze en maakt u vervolgens een installatiepakket. Chocolatey kan verschillende soorten installatiepakketten verwerken, zoals MSI, MSU, ZIP. En u hebt de volledige kracht van PowerShell om de daadwerkelijke installatie uit te voeren als de systeemeigen mogelijkheden van Chocolatey er niet aan toe zijn. Plaats het pakket op een plaats bereikbaar- een pakketopslagplaats. In dit gebruiksvoorbeeld wordt een openbare map in een Azure Blob Storage-account gebruikt, maar dit kan overal zijn. Chocolatey werkt systeemeigen met NuGet-servers en een paar andere voor het beheer van pakketmetagegevens. In dit artikel worden de opties beschreven. In het gebruiksvoorbeeld wordt NuGet gebruikt. Een Nuspec is metagegevens over uw pakketten. De Nuspec-informatie wordt gecompileerd in een NuPkg en opgeslagen op een NuGet-server. Wanneer uw configuratie een pakket op naam aanvraagt en verwijst naar een NuGet-server, haalt de Chocolatey DSC-resource op de VM het pakket op en installeert het. U kunt ook een specifieke versie van een pakket aanvragen.

Linksonder in de afbeelding ziet u een Azure Resource Manager-sjabloon. In dit gebruiksvoorbeeld registreert de VM-extensie de VIRTUELE machine met de Pull-server van Azure Automation State Configuration als een knooppunt. De configuratie wordt tweemaal opgeslagen op de pull-server: eenmaal als tekst zonder opmaak en eenmaal gecompileerd als een MOF-bestand. In Azure Portal vertegenwoordigt de MOF een knooppuntconfiguratie, in plaats van een eenvoudige configuratie. Dit is het artefact dat is gekoppeld aan een knooppunt, zodat het knooppunt de configuratie kent. Hieronder ziet u hoe u de knooppuntconfiguratie toewijst aan het knooppunt.

Het maken van de Nuspec, het compileren ervan en opslaan in een NuGet-server is een klein ding. En u beheert al VM's.

Als u de volgende stap voor continue implementatie uitvoert, moet u de pull-server één keer instellen, uw knooppunten er één keer bij registreren en de eerste configuratie op de server maken en opslaan. Wanneer pakketten worden bijgewerkt en geïmplementeerd in de opslagplaats, hoeft u alleen de configuratie en knooppuntconfiguratie op de pull-server te vernieuwen.

Als u niet begint met een Resource Manager-sjabloon, is dat prima. Er zijn PowerShell-opdrachten waarmee u uw VM's kunt registreren bij de pull-server. Zie Onboarding-machines voor beheer door Azure Automation State Configuration voor meer informatie.

Over het gebruiksvoorbeeld

Het gebruiksvoorbeeld in dit artikel begint met een virtuele machine vanuit een algemene Windows Server 2012 R2-installatiekopieën uit de Azure-galerie. U kunt beginnen vanaf elke opgeslagen installatiekopieën en vervolgens aanpassen met de DSC-configuratie. Het wijzigen van de configuratie die in een installatiekopieën is gebakken, is echter veel moeilijker dan het dynamisch bijwerken van de configuratie met behulp van DSC.

U hoeft geen Resource Manager-sjabloon en de VM-extensie te gebruiken om deze techniek met uw VM's te gebruiken. En uw VM's hoeven zich niet in Azure te bevinden om onder CD-beheer te staan. Het enige dat nodig is, is dat Chocolatey wordt geïnstalleerd en dat de LCM is geconfigureerd op de virtuele machine, zodat deze weet waar de pull-server zich bevindt.

Wanneer u een pakket bijwerkt op een VM die in productie is, moet u die VM buiten de rotatie halen terwijl de update is geïnstalleerd. Hoe u dit doet, varieert sterk. Met een VIRTUELE machine achter een Azure Load Balancer kunt u bijvoorbeeld een aangepaste test toevoegen. Als u de VM bijwerkt, retourneert het testeindpunt een 400. De aanpassing die nodig is om deze wijziging te veroorzaken, kan zich in uw configuratie bevinden, net als de aanpassing om deze terug te zetten naar een 200 zodra de update is voltooid.

De volledige bron voor dit gebruiksvoorbeeld bevindt zich in dit Visual Studio-project op GitHub.

Stap 1: het pull-server- en Automation-account instellen

Op een geverifieerde (Connect-AzAccount) PowerShell-opdrachtregel: (kan enkele minuten duren terwijl de pull-server is ingesteld)

New-AzResourceGroup -Name MY-AUTOMATION-RG -Location MY-RG-LOCATION-IN-QUOTES
New-AzAutomationAccount -ResourceGroupName MY-AUTOMATION-RG -Location MY-RG-LOCATION-IN-QUOTES -Name MY-AUTOMATION-ACCOUNT

U kunt uw Automation-account in een van de volgende regio's plaatsen (ook wel bekend als locaties): VS - oost 2, VS - zuid-centraal, US Gov Virginia, Europa - west, Azië - zuidoost, Japan - oost, India - centraal en Australië - zuidoost, Canada - centraal, Europa - noord.

Stap 2: DE VM-extensie aanpassen aan de Resource Manager-sjabloon

Details voor vm-registratie (met behulp van de PowerShell DSC VM-extensie) die is opgegeven in deze Azure-quickstartsjabloon. Met deze stap wordt uw nieuwe VM geregistreerd bij de pull-server in de lijst met statusconfiguratieknooppunten. Een deel van deze registratie geeft de knooppuntconfiguratie op die moet worden toegepast op het knooppunt. Deze knooppuntconfiguratie hoeft nog niet te bestaan in de pull-server, dus het is prima dat stap 4 is waar dit voor de eerste keer wordt gedaan. Maar hier in stap 2 moet u de naam van het knooppunt en de naam van de configuratie hebben besloten. In dit gebruiksvoorbeeld is het knooppunt 'isvbox' en de configuratie is 'ISVBoxConfig'. De naam van de knooppuntconfiguratie (die moet worden opgegeven in DeploymentTemplate.json) is dus ISVBoxConfig.isvbox.

Stap 3: Vereiste DSC-resources toevoegen aan de pull-server

De PowerShell Gallery is geïnstrueerd om DSC-resources te installeren in uw Azure Automation-account. Navigeer naar de gewenste resource en klik op de knop Implementeren in Azure Automation.

PowerShell Gallery example

Met een andere techniek die onlangs is toegevoegd aan Azure Portal, kunt u nieuwe modules ophalen of bestaande modules bijwerken. Klik op de resource van het Automation-account, de tegel Assets en ten slotte op de tegel Modules. Met het pictogram Galerie bladeren kunt u de lijst met modules in de galerie bekijken, inzoomen op details en uiteindelijk importeren in uw Automation-account. Dit is een uitstekende manier om uw modules van tijd tot tijd up-to-date te houden. En de importfunctie controleert afhankelijkheden met andere modules om ervoor te zorgen dat er niets wordt gesynchroniseerd.

Er is ook een handmatige benadering die slechts eenmaal per resource wordt gebruikt, tenzij u deze later wilt upgraden. Zie Integratiemodules voor Ontwerpen voor Azure Automation voor meer informatie over het ontwerpen van PowerShell-integratiemodules.

Notitie

De mapstructuur van een PowerShell-integratiemodule voor een Windows-computer verschilt enigszins van de mapstructuur die door De Azure Automation wordt verwacht.

  1. Installeer Windows Management Framework v5 (niet nodig voor Windows 10).

  2. Installeer de integratiemodule.

    Install-Module -Name MODULE-NAME`    <—grabs the module from the PowerShell Gallery
    
  3. Kopieer de modulemap van c:\Program Files\WindowsPowerShell\Modules\MODULE-NAME naar een tijdelijke map.

  4. Verwijder voorbeelden en documentatie uit de hoofdmap.

  5. Zip de hoofdmap en noem het ZIP-bestand met de naam van de map.

  6. Plaats het ZIP-bestand op een bereikbaar HTTP-locatie, zoals blobopslag in een Azure Storage-account.

  7. Voer de volgende opdracht uit.

    New-AzAutomationModule `
      -ResourceGroupName MY-AUTOMATION-RG -AutomationAccountName MY-AUTOMATION-ACCOUNT `
      -Name MODULE-NAME -ContentLinkUri 'https://STORAGE-URI/CONTAINERNAME/MODULE-NAME.zip'
    

In het inbegrepen voorbeeld worden deze stappen geïmplementeerd voor cChoco en xNetworking.

Stap 4: De knooppuntconfiguratie toevoegen aan de pull-server

Er is niets speciaals aan de eerste keer dat u uw configuratie in de pull-server importeert en compileert. Alle latere import- of compilaties van dezelfde configuratie zien er precies hetzelfde uit. Telkens wanneer u uw pakket bijwerkt en dit naar productie moet pushen, voert u deze stap uit nadat u ervoor hebt gezorgd dat het configuratiebestand juist is, inclusief de nieuwe versie van uw pakket. Dit is het configuratiebestand 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.'
            Enabled       = 'True'
            Action       = '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'
        }
    }
}

Hier volgt het script New-ConfigurationScript.ps1 (gewijzigd om de Az-module te gebruiken):

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

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

$compilationJobId = $jobData.Id

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

Deze stappen resulteren in een nieuwe knooppuntconfiguratie met de naam ISVBoxConfig.isvbox die op de pull-server wordt geplaatst. De naam van de knooppuntconfiguratie is gebouwd als configurationName.nodeName.

Stap 5: Pakketmetagegevens maken en onderhouden

Voor elk pakket dat u in de pakketopslagplaats plaatst, hebt u een Nuspec nodig die het beschrijft. Het moet worden gecompileerd en opgeslagen op uw NuGet-server. Dit proces wordt hier beschreven.

U kunt MyGet.org als een NuGet-server gebruiken. U kunt deze service kopen, maar thee is een gratis starter-SKU. In NuGet vindt u instructies voor het installeren van uw eigen NuGet-server voor uw privépakketten.

Stap 6: Alles aan elkaar koppelen

Telkens wanneer een versie wordt doorgegeven aan QA en wordt goedgekeurd voor implementatie, wordt het pakket gemaakt en worden nuspec en nupkg bijgewerkt en geïmplementeerd op de NuGet-server. De configuratie (stap 4) moet ook worden bijgewerkt om akkoord te gaan met het nieuwe versienummer. Deze moet vervolgens naar de pull-server worden verzonden en gecompileerd.

Vanaf dat moment is het aan de VM's die afhankelijk zijn van die configuratie om de update op te halen en te installeren. Elk van deze updates is eenvoudig: slechts een regel of twee van PowerShell. Voor Azure DevOps worden sommige hiervan ingekapseld in buildtaken die samen in een build kunnen worden gekoppeld. In dit artikel vindt u meer informatie. In deze GitHub-opslagplaats worden de beschikbare buildtaken beschreven.

Volgende stappen