Nastavení průběžného nasazování s využitím Chocolatey

Poznámka:

Než povolíte službu Automation State Configuration, rádi bychom věděli, že novější verze DSC je teď obecně dostupná a spravovaná funkcí konfigurace hosta s názvem Azure Policy. Služba konfigurace hosta kombinuje funkce rozšíření DSC, Azure Automation State Configuration a nejčastěji požadované funkce od zpětné vazby zákazníků. Konfigurace hosta také zahrnuje podporu hybridních počítačů prostřednictvím serverů s podporou Arc.

Ve světě DevOps existuje mnoho nástrojů, které vám pomůžou s různými body v kanálu kontinuální integrace. Azure Automation State Configuration je uvítacím novým doplňkem možností, které můžou využívat týmy DevOps.

Azure Automation je spravovaná služba v Microsoft Azure, která umožňuje automatizovat různé úlohy pomocí runbooků, uzlů a sdílených prostředků, jako jsou přihlašovací údaje, plány a globální proměnné. Azure Automation State Configuration rozšiřuje tuto možnost automatizace tak, aby zahrnovala nástroje DSC (Desired State Configuration) PowerShellu. Tady je skvělý přehled.

Tento článek ukazuje, jak nastavit průběžné nasazování (CD) pro počítač s Windows. Můžete snadno rozšířit techniku tak, aby zahrnovala tolik počítačů s Windows, kolik je potřeba v roli, například webu, a přejít odtud k dalším rolím.

Continuous Deployment for IaaS VMs

Na vysoké úrovni

Je tu poměrně dost, ale naštěstí se dá rozdělit do dvou hlavních procesů:

  • Napíšete kód a otestujete ho a pak vytvoříte a publikujete instalační balíčky pro hlavní a podverze systému.
  • Vytváření a správa virtuálních počítačů, které instalují a spouštějí kód v balíčcích

Jakmile jsou obě tyto základní procesy zavedeny, je snadné automaticky aktualizovat balíček na virtuálních počítačích při vytváření a nasazení nových verzí.

Přehled komponent

Správci balíčků, jako je apt-get , jsou dobře známí ve světě Linuxu, ale ne tolik ve světě Windows. Chocolatey je taková věc, a Scott Hanselman blog o tématu je skvělý úvod. V maticovém přehledu vám Chocolatey umožňuje pomocí příkazového řádku instalovat balíčky z centrálního úložiště do operačního systému Windows. Můžete vytvořit a spravovat vlastní úložiště a Chocolatey může instalovat balíčky z libovolného počtu úložišť, která určíte.

PowerShell DSC je nástroj PowerShellu, který umožňuje deklarovat požadovanou konfiguraci počítače. Pokud například chcete nainstalovat Chocolatey, nainstalovat službu IIS, otevřít port 80 a nainstalovanou verzi 1.0.0 vašeho webu, implementuje nástroj DSC Local Configuration Manager (LCM) tuto konfiguraci. Server vyžádané replikace DSC obsahuje úložiště konfigurací pro vaše počítače. LCM na každém počítači pravidelně kontroluje, jestli jeho konfigurace odpovídá uložené konfiguraci. Může buď nahlásit stav, nebo se pokusit počítač vrátit zpět do souladu s uloženou konfigurací. Uloženou konfiguraci na serveru vyžádané replikace můžete upravit tak, aby počítač nebo sada počítačů přišly do souladu se změněnou konfigurací.

Prostředek DSC je modul kódu, který má specifické funkce, jako je správa sítí, Active Directory nebo SQL Serveru. Prostředek Chocolatey DSC ví, jak přistupovat k Serveru NuGet (mimo jiné), stahovat balíčky, instalovat balíčky atd. V Galerie prostředí PowerShell existuje mnoho dalších prostředků DSC. Tyto moduly nainstalujete na server vyžádané replikace služby Azure Automation State Configuration pro použití s vašimi konfiguracemi.

Šablony Resource Manageru poskytují deklarativní způsob generování infrastruktury, například sítě, podsítě, zabezpečení sítě a směrování, nástroje pro vyrovnávání zatížení, síťové karty, virtuální počítače atd. Tady je článek , který porovnává model nasazení Resource Manager (deklarativní) s modelem nasazení Azure Service Management (ASM nebo Classic) (imperativní). Tento článek obsahuje diskuzi o hlavních poskytovateli prostředků: výpočetních prostředků, úložišti a síti.

Jednou z klíčových funkcí šablony Resource Manageru je schopnost nainstalovat rozšíření virtuálního počítače do virtuálního počítače při jeho zřízení. Rozšíření virtuálního počítače má specifické možnosti, jako je spuštění vlastního skriptu, instalace antivirového softwaru a spuštění konfiguračního skriptu DSC. Existuje mnoho dalších typů rozšíření virtuálních počítačů.

Rychlý výlet kolem diagramu

Od začátku napíšete kód, sestavíte ho, otestujete ho a pak vytvoříte instalační balíček. Chocolatey dokáže zpracovat různé typy instalačních balíčků, jako je MSI, MSU, ZIP. A máte plnou sílu PowerShellu, abyste mohli provést skutečnou instalaci, pokud na ní nejsou nativní schopnosti Chocolatey. Umístěte balíček na nějaké místo dostupné – úložiště balíčků. Tento příklad použití používá veřejnou složku v účtu úložiště objektů blob v Azure, ale může být kdekoli. Chocolatey nativně funguje se servery NuGet a několik dalších pro správu metadat balíčků. Tento článek popisuje možnosti. Příklad použití používá NuGet. A Nuspec je metadata o vašich balíčcích. Informace Nuspec jsou kompilovány do NuPkg a uloženy na serveru NuGet. Když konfigurace požádá o balíček podle názvu a odkazuje na server NuGet, prostředek Chocolatey DSC na virtuálním počítači balíček vezme a nainstaluje ho. Můžete také požádat o konkrétní verzi balíčku.

V levém dolním rohu obrázku je šablona Azure Resource Manageru. V tomto příkladu použití rozšíření virtuálního počítače zaregistruje virtuální počítač pomocí serveru vyžádané replikace azure Automation State Configuration jako uzlu. Konfigurace je uložena na serveru vyžádané replikace dvakrát: jednou jako prostý text a jednou je zkompilována jako soubor MOF. MoF na webu Azure Portal představuje konfiguraci uzlu, nikoli jednoduchou konfiguraci. Je to artefakt, který je přidružený k uzlu, takže uzel bude znát jeho konfiguraci. Podrobnosti níže ukazují, jak přiřadit konfiguraci uzlu k uzlu.

Vytvoření Nuspec, jeho kompilace a uložení na serveru NuGet je malá věc. A už spravujete virtuální počítače.

Při dalším kroku průběžného nasazování se vyžaduje jednorázové nastavení serveru vyžádané replikace, jednorázová registrace uzlů a vytvoření a uložení počáteční konfigurace na serveru. Když se balíčky upgradují a nasazují do úložiště, stačí podle potřeby aktualizovat konfiguraci a konfiguraci uzlu na serveru vyžádané replikace.

Pokud nespouštíte šablonu Resource Manageru, je to v pořádku. Existují příkazy PowerShellu, které vám pomůžou zaregistrovat virtuální počítače se serverem vyžádané replikace. Další informace najdete v tématu Onboarding machines for management by Azure Automation State Configuration.

Informace o příkladu použití

Příklad použití v tomto článku začíná virtuálním počítačem z obecné image Windows Serveru 2012 R2 z galerie Azure. Můžete začít z libovolné uložené image a pak ji upravit pomocí konfigurace DSC. Změna konfigurace, která je zapečená do image, je ale mnohem obtížnější než dynamicky aktualizovat konfiguraci pomocí DSC.

K použití této techniky s virtuálními počítači nemusíte používat šablonu Resource Manageru a rozšíření virtuálního počítače. A vaše virtuální počítače nemusí být v Azure, aby byly pod správou CD. Vše, co je potřeba, je, aby se na virtuálním počítači nainstalovala služba Chocolatey a nakonfigurovala služba LCM, aby věděla, kde je server vyžádané replikace.

Když aktualizujete balíček na virtuálním počítači, který je v produkčním prostředí, musíte tento virtuální počítač během instalace aktualizace vyřídit mimo obměnu. Způsob, jakým to uděláte, se značně liší. Například s virtuálním počítačem za Azure Load Balancerem můžete přidat vlastní sondu. Při aktualizaci virtuálního počítače vraťte koncový bod sondy hodnotu 400. Úprava potřebná k tomu, aby tato změna způsobila, může být uvnitř vaší konfigurace, protože je možné ji upravit tak, aby se po dokončení aktualizace vrátila zpět na verzi 200.

Úplný zdroj pro tento příklad použití je v tomto projektu sady Visual Studio na GitHubu.

Krok 1: Nastavení serveru vyžádané replikace a účtu Automation

Na ověřeném (Connect-AzAccount) příkazovém řádku PowerShellu: (může trvat několik minut, než je server vyžádané replikace nastavený)

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

Svůj účet Automation můžete umístit do některé z následujících oblastí (označovaných také jako umístění): USA – východ 2, USA – středojiž, US Gov Virginia, Západní Evropa, Jihovýchodní Asie, Japonsko – východ, Indie – střed a Austrálie – jihovýchod, Kanada – střed, Severní Evropa.

Krok 2: Úprava rozšíření virtuálního počítače na šablonu Resource Manageru

Podrobnosti o registraci virtuálního počítače (pomocí rozšíření virtuálního počítače PowerShell DSC) uvedené v této šabloně rychlého startu Azure Tento krok zaregistruje nový virtuální počítač na serveru vyžádané replikace v seznamu uzlů konfigurace stavu. Součástí této registrace je určení konfigurace uzlu, která se má použít na uzel. Tato konfigurace uzlu ještě na serveru vyžádané replikace neexistuje, takže je v pořádku, že krok 4 je místo, kde se to provádí poprvé. Tady ale v kroku 2 musíte rozhodnout o názvu uzlu a názvu konfigurace. V tomto příkladu použití je uzel isvbox a konfigurace je ISVBoxConfig. Název konfigurace uzlu (který se má zadat v Souboru DeploymentTemplate.json) je isVBoxConfig.isvbox.

Krok 3: Přidání požadovaných prostředků DSC na server vyžádané replikace

Galerie prostředí PowerShell se instrumentuje k instalaci prostředků DSC do vašeho účtu Azure Automation. Přejděte k požadovanému prostředku a klikněte na tlačítko Nasadit do Služby Azure Automation.

PowerShell Gallery example

Další technika, která byla nedávno přidána na web Azure Portal, umožňuje načíst nové moduly nebo aktualizovat existující moduly. Klikněte na prostředek účtu Automation, dlaždici Prostředky a nakonec na dlaždici Moduly. Ikona Procházet galerii umožňuje zobrazit seznam modulů v galerii, přejít k podrobnostem a nakonec importovat do účtu Automation. To je skvělý způsob, jak udržovat moduly aktuální od času. A funkce importu kontroluje závislosti s jinými moduly, aby se zajistilo, že se nic nesynchronizuje.

Existuje také ruční přístup, který se používá jenom jednou pro každý prostředek, pokud ho nechcete upgradovat později. Další informace o vytváření modulů integrace PowerShellu najdete v tématu Vytváření modulů integrace pro Azure Automation.

Poznámka:

Struktura složek modulu integrace PowerShellu pro počítač s Windows se mírně liší od struktury složek očekávané službou Azure Automation.

  1. Nainstalujte Windows Management Framework v5 (není potřeba pro Windows 10).

  2. Nainstalujte modul integrace.

    Install-Module -Name MODULE-NAME`    <—grabs the module from the PowerShell Gallery
    
  3. Zkopírujte složku modulu z c:\Program Files\WindowsPowerShell\Modules\MODULE-NAME do dočasné složky.

  4. Odstraňte ukázky a dokumentaci z hlavní složky.

  5. Zazipujte hlavní složku a pojmenujte soubor ZIP názvem složky.

  6. Soubor ZIP umístěte do dostupného umístění HTTP, například do úložiště objektů blob v účtu služby Azure Storage.

  7. Spusťte následující příkaz:

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

Zahrnutý příklad implementuje tyto kroky pro cChoco a xNetworking.

Krok 4: Přidání konfigurace uzlu na server vyžádané replikace

Při prvním importu konfigurace do serveru vyžádané replikace a kompilace není nic zvláštního. Všechny pozdější importy nebo kompilace stejné konfigurace vypadají úplně stejně. Pokaždé, když balíček aktualizujete a potřebujete ho odeslat do produkčního prostředí, provedete tento krok po zajištění správnosti konfiguračního souboru , včetně nové verze balíčku. Tady je konfigurační soubor 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'
        }
    }
}

Tady je skript New-ConfigurationScript.ps1 (upravený tak, aby používal modul Az):

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

Výsledkem těchto kroků je nová konfigurace uzlu s názvem ISVBoxConfig.isvbox umístěná na server vyžádané replikace. Název konfigurace uzlu je vytvořen jako configurationName.nodeName.

Krok 5: Vytvoření a údržba metadat balíčku

Pro každý balíček, který vložíte do úložiště balíčků, potřebujete Nuspec, který ho popisuje. Musí být zkompilován a uložen na vašem serveru NuGet. Tento proces je zde popsaný.

Jako server NuGet můžete použít MyGet.org . Tuto službu si můžete koupit, ale thee je bezplatná počáteční skladová položka. V NuGetu najdete pokyny k instalaci vlastního serveru NuGet pro vaše privátní balíčky.

Krok 6: Svázat vše dohromady

Pokaždé, když verze projde kontrolu kvality a je schválená pro nasazení, balíček se vytvoří a nuspec a nupkg se aktualizují a nasadí na server NuGet. Konfigurace (krok 4) musí být také aktualizována, aby souhlasila s číslem nové verze. Pak se musí odeslat na server vyžádané replikace a zkompilovat ho.

Od tohoto okamžiku je na virtuálních počítačích, které závisí na této konfiguraci, aby aktualizaci stáhly a nainstalovaly. Každá z těchto aktualizací je jednoduchá – stačí řádek nebo dva powershellové řádky. U Azure DevOps se některé z nich zapouzdřují do úloh sestavení, které je možné zřetězovat společně v sestavení. Tento článek obsahuje další podrobnosti. Toto úložiště GitHubu podrobně popisuje dostupné úlohy sestavení.

Další kroky