Doorlopende implementatie instellen met Chocolatey
Notitie
Azure Automation State Configuration wordt op 30 september 2027 buiten gebruik gesteld. Stap op die datum over naar Azure Machine Configuration . Zie de aankondiging van het blogbericht voor meer informatie. De Azure Machine Configuration-service combineert functies van DSC-extensie, Azure Automation State Configuration en de meest aangevraagde functies uit feedback van klanten. Azure Machine Configuration omvat ook ondersteuning voor hybride machines via servers met Arc.
Let op
Azure Automation DSC voor Linux is op 30 september 2023 buiten gebruik gesteld. Zie de aankondiging voor meer informatie.
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 meer rollen gaan.
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 een pakketbeheerder voor Windows. Scott Hanselman's blogpost over Chocolatey is een geweldige inleiding. Met Chocolatey kunt u 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 u toegang krijgen tot een NuGet-server, pakketten downloadt, pakketten installeert en andere taken uitvoert. 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 resources te genereren voor uw infrastructuur, zoals:
- netwerken en subnetten
- netwerkbeveiliging
- routering
- load balancers,
- NIC's, VM's en andere
Zie Azure Resource Manager versus klassieke implementatie voor een vergelijking van het Resource Manager-implementatiemodel (declaratief) met het klassieke Azure-implementatiemodel (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 te installeren tijdens het inrichten van de VIRTUELE machine. 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.
Het is relatief eenvoudig om de Nuspec te maken, te compileren en op te slaan in een NuGet-server. Voor de volgende stap voor continue implementatie zijn de volgende eenmalige taken vereist:
- De pull-server instellen
- Uw knooppunten registreren bij de server
- De eerste configuratie op de server maken
U hoeft alleen de configuratie en knooppuntconfiguratie op de pull-server te vernieuwen wanneer u pakketten bijwerken en implementeren in de opslagplaats.
Als u niet begint met een Resource Manager-sjabloon, zijn er 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. Installeer Chocolatey en configureer de LCM 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
Voer de volgende opdrachten uit in een geverifieerde (Connect-AzAccount
) PowerShell-sessie:
New-AzResourceGroup -Name MY-AUTOMATION-RG -Location MY-RG-LOCATION-IN-QUOTES
$newAzAutomationAccountSplat = @{
ResourceGroupName = 'MY-AUTOMATION-RG'
Location = 'MY-RG-LOCATION-IN-QUOTES'
Name = 'MY-AUTOMATION-ACCOUNT'
}
New-AzAutomationAccount @newAzAutomationAccountSplat
Deze stap duurt enkele minuten terwijl de pull-server is ingesteld.
U kunt uw Automation-account maken in een van de volgende Azure-regio's:
- VS - oost 2
- VS - zuid-centraal
- VS (overheid) - Virginia
- Europa -west
- Azië - zuidoost
- Japan East
- India - centraal
- Australië - zuidoost
- Canada - midden
- 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, maar u moet de naam van het knooppunt en de naam van de configuratie kiezen. In dit voorbeeld is isvbox
het knooppunt en de configuratienaam.ISVBoxConfig
De knooppuntconfiguratienaam die u opgeeft DeploymentTemplate.json
, is ISVBoxConfig.isvbox
.
Stap 3: Vereiste DSC-resources toevoegen aan de pull-server
De PowerShell Gallery kan DSC-resources installeren in uw Azure Automation-account. Navigeer naar de gewenste resource en selecteer Implementeren in Azure Automation.
Met een andere techniek die onlangs is toegevoegd aan Azure Portal, kunt u nieuwe modules ophalen of bestaande modules bijwerken. Selecteer het pictogram Galerie bladeren om de lijst met modules in de galerie weer te geven, details in te zoomen en in uw Automation-account te importeren. U kunt dit proces gebruiken om uw modules up-to-date te houden. Bovendien controleert de importfunctie 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.
Installeer Windows Management Framework v5 (niet nodig voor Windows 10).
Installeer de integratiemodule.
Install-Module -Name MODULE-NAME` <—grabs the module from the PowerShell Gallery
Kopieer de modulemap van
C:\Program Files\WindowsPowerShell\Modules\MODULE-NAME
naar een tijdelijke map.Verwijder voorbeelden en documentatie uit de hoofdmap.
Zip de hoofdmap en noem het ZIP-bestand met de naam van de map.
Plaats het ZIP-bestand op een bereikbaar HTTP-locatie, zoals blobopslag in een Azure Storage-account.
Voer de volgende opdracht uit.
$newAzAutomationModuleSplat = @{ ResourceGroupName = 'MY-AUTOMATION-RG' AutomationAccountName = 'MY-AUTOMATION-ACCOUNT' Name = 'MODULE-NAME' ContentLinkUri = 'https://STORAGE-URI/CONTAINERNAME/MODULE-NAME.zip' } New-AzAutomationModule @newAzAutomationModuleSplat
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'
}
}
}
Het volgende New-ConfigurationScript.ps1
script is gewijzigd om de Az PowerShell-module te gebruiken:
$importAzAutomationDscConfigurationSplat = @{
ResourceGroupName = 'MY-AUTOMATION-RG'
AutomationAccountName = 'MY-AUTOMATION-ACCOUNT'
SourcePath = 'C:\temp\AzureAutomationDsc\ISVBoxConfig.ps1'
Published = -Published
Force = -Force
}
Import-AzAutomationDscConfiguration @importAzAutomationDscConfigurationSplat
$startAzAutomationDscCompilationJobSplat = @{
ResourceGroupName = 'MY-AUTOMATION-RG'
AutomationAccountName = 'MY-AUTOMATION-ACCOUNT'
ConfigurationName = 'ISVBoxConfig'
}
$jobData = Start-AzAutomationDscCompilationJob @startAzAutomationDscCompilationJobSplat
$compilationJobId = $jobData.Id
$getAzAutomationDscCompilationJobSplat = @{
ResourceGroupName = 'MY-AUTOMATION-RG'
AutomationAccountName = 'MY-AUTOMATION-ACCOUNT'
Id = $compilationJobId
}
Get-AzAutomationDscCompilationJob @getAzAutomationDscCompilationJobSplat
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. Zie [Een NuGet-pakket maken met nuget.exe CLI] voor meer informatie.
U kunt MyGet.org als een NuGet-server gebruiken. U kunt deze service kopen, maar thee is een gratis starter-SKU. Zie de documentatie over Nuget.org voor instructies over 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. U moet de configuratie (stap 4) bijwerken met het nieuwe versienummer. Verzend deze vervolgens naar de pull-server en compileer deze.
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 u in een build kunt koppelen. In dit artikel vindt u meer informatie. In deze GitHub-opslagplaats worden de beschikbare buildtaken beschreven.
Verwante artikelen:
Volgende stappen
- Zie het overzicht van Azure Automation State Configuration voor een overzicht.
- Zie Aan de slag met Azure Automation State Configuration om aan de slag te gaan met de functie.
- Zie DSC-configuraties compileren in Azure Automation State Configuration voor meer informatie over het compileren van DSC-configuraties, zodat u deze kunt toewijzen aan doelknooppunten.
- Zie Az.Automation voor een naslagdocumentatie voor een PowerShell-cmdlet.
- Zie prijzen voor Azure Automation State Configuration voor meer informatie over prijzen.