Share via


Chocolatey ile sürekli dağıtım ayarlama

Dekont

Otomasyon Durumu Yapılandırması'nı etkinleştirmeden önce, konuk yapılandırması adlı Azure İlkesi özelliği tarafından yönetilen daha yeni bir DSC sürümünün genel kullanıma sunulduğunun bilinmesini isteriz. Konuk yapılandırma hizmeti DSC Uzantısı, Azure Otomasyonu Durum Yapılandırması özelliklerini ve müşteri geri bildirimlerinden en sık istenen özellikleri birleştirir. Konuk yapılandırması, Arc özellikli sunucular aracılığıyla karma makine desteğini de içerir.

DevOps dünyasında, sürekli tümleştirme işlem hattındaki çeşitli noktalarda yardımcı olacak birçok araç vardır. Azure Otomasyonu Durum Yapılandırması, DevOps ekiplerinin kullanabileceği seçeneklere yeni bir eklemedir.

Azure Otomasyonu, Microsoft Azure'da runbook'ları, düğümleri ve kimlik bilgileri, zamanlamalar ve genel değişkenler gibi paylaşılan kaynakları kullanarak çeşitli görevleri otomatikleştirmenizi sağlayan yönetilen bir hizmettir. Azure Otomasyonu Durum Yapılandırması, bu otomasyon özelliğini PowerShell İstenen Durum Yapılandırması (DSC) araçlarını içerecek şekilde genişletir. İşte harika bir genel bakış.

Bu makalede, bir Windows bilgisayarı için Sürekli Dağıtımın (CD) nasıl ayarlanacağı gösterilmektedir. Tekniği kolayca, role gereken sayıda Windows bilgisayarı (örneğin, bir web sitesi) içerecek şekilde genişletebilir ve oradan ek rollere gidebilirsiniz.

Continuous Deployment for IaaS VMs

Yüksek düzeyde

Burada oldukça fazla şey oluyor, ancak neyse ki iki ana işleme ayrılabilir:

  • Kod yazma ve test etme, ardından sistemin ana ve ikincil sürümleri için yükleme paketleri oluşturma ve yayımlama.
  • Paketlerde kodu yükleyen ve yürüten VM'leri oluşturma ve yönetme.

Bu temel işlemlerin her ikisi de gerçekleştikten sonra, yeni sürümler oluşturulur ve dağıtılırken vm'lerinizdeki paketi otomatik olarak güncelleştirmek kolaydır.

Bileşene genel bakış

apt-get gibi paket yöneticileri Linux dünyasında iyi bilinir, ancak Windows dünyasında çok fazla bilinmez. Chocolatey böyle bir şeydir ve Scott Hanselman'ın konuyla ilgili blogu harika bir giriştir. Özetle Chocolatey, merkezi bir depodan Windows işletim sistemine paket yüklemek için komut satırını kullanmanıza olanak tanır. Kendi deponuzu oluşturup yönetebilirsiniz ve Chocolatey belirlediğiniz herhangi bir sayıda depodan paket yükleyebilir.

PowerShell DSC , bir makine için istediğiniz yapılandırmayı bildirmenizi sağlayan bir PowerShell aracıdır. Örneğin Chocolatey'nin yüklenmesini, IIS'nin yüklenmesini, 80 numaralı bağlantı noktasının açılmasını ve web sitenizin 1.0.0 sürümünün yüklenmesini istiyorsanız DSC Local Configuration Manager (LCM) bu yapılandırmayı uygular. DSC çekme sunucusu, makineleriniz için bir yapılandırma deposu içerir. Her makinedeki LCM, yapılandırmasının depolanan yapılandırmayla eşleşip eşleşmediğini görmek için düzenli aralıklarla iade eder. Durumu bildirebilir veya makineyi depolanan yapılandırmayla uyumlu hale getirmeye çalışır. Bir makinenin veya makine kümesinin değiştirilen yapılandırmayla uyumlu hale gelmesini sağlamak için çekme sunucusunda depolanan yapılandırmayı düzenleyebilirsiniz.

DSC kaynağı, ağ yönetimi, Active Directory veya SQL Server gibi belirli özelliklere sahip bir kod modülüdür. Chocolatey DSC Kaynağı, NuGet Sunucusuna (diğerlerinin arasında) erişmeyi, paketleri indirmeyi, paketleri yüklemeyi vb. bilir. PowerShell Galerisi birçok DSC Kaynağı daha vardır. Bu modülleri yapılandırmalarınız tarafından kullanılmak üzere Azure Otomasyonu Durum Yapılandırması çekme sunucunuza yüklersiniz.

Resource Manager şablonları altyapınızı oluşturmak için ağlar, alt ağlar, ağ güvenliği ve yönlendirme, yük dengeleyiciler, NIC'ler, VM'ler vb. bildirim temelli bir yol sağlar. Resource Manager dağıtım modelini (bildirim temelli) Azure Hizmet Yönetimi (ASM veya klasik) dağıtım modeliyle (kesinlik temelli) karşılaştıran bir makale aşağıda verilmiştir. Bu makale temel kaynak sağlayıcılarının bir tartışmasını içerir: işlem, depolama ve ağ.

Resource Manager şablonunun önemli özelliklerinden biri, sağlandığında VM uzantısını VM'ye yükleyebilmesidir. VM uzantısı, özel betik çalıştırma, virüsten koruma yazılımı yükleme ve DSC yapılandırma betiği çalıştırma gibi belirli özelliklere sahiptir. Başka birçok vm uzantısı türü vardır.

Diyagramda hızlı gezi

En üstten başlayarak kodunuzu yazar, derler, test eder ve ardından bir yükleme paketi oluşturursunuz. Chocolatey, MSI, MSU, ZIP gibi çeşitli yükleme paketlerini işleyebilir. Ayrıca, Chocolatey'nin yerel özellikleri buna bağlı değilse gerçek yüklemeyi yapmak için PowerShell'in tüm gücüne sahip olursunuz. Paketi ulaşılabilen bir yere ( bir paket deposu) yerleştirin. Bu kullanım örneği, Azure blob depolama hesabındaki bir ortak klasörü kullanır, ancak her yerde olabilir. Chocolatey, paket meta verilerinin yönetimi için NuGet sunucuları ve birkaç diğer sunucuyla yerel olarak çalışır. Bu makalede seçenekler açıklanmaktadır. Kullanım örneği NuGet kullanır. Nuspec, paketlerinizle ilgili meta verilerdir. Nuspec bilgileri bir NuPkg içinde derlenip bir NuGet sunucusunda depolanır. Yapılandırmanız ada göre bir paket istediğinde ve bir NuGet sunucusuna başvurduğunda, VM'de Chocolatey DSC kaynağı paketi alır ve yükler. Paketin belirli bir sürümünü de isteyebilirsiniz.

Resmin sol alt kısmında bir Azure Resource Manager şablonu vardır. Bu kullanım örneğinde, VM uzantısı VM'yi Azure Otomasyonu Durum Yapılandırması çekme sunucusuna düğüm olarak kaydeder. Yapılandırma, çekme sunucusunda iki kez depolanır: bir kez düz metin olarak ve bir kez MOF dosyası olarak derlenmiştir. Azure portalında MOF, basit bir yapılandırmanın aksine bir düğüm yapılandırmasını temsil eder. Düğümle ilişkilendirilmiş yapıttır, böylece düğüm yapılandırmasını bilir. Aşağıdaki ayrıntılar düğüm yapılandırmasını düğüme atamayı gösterir.

Nuspec'i oluşturmak, derlemek ve nuGet sunucusunda depolamak küçük bir şeydir. Vm'leri zaten yönetiyorsunuz.

Bir sonraki adımı sürekli dağıtıma almak için çekme sunucusunun bir kez ayarlanması, düğümlerinizin bir kez kaydedilmesi ve ilk yapılandırmanın sunucuda oluşturulup depolanması gerekir. Paketler yükseltilir ve depoya dağıtılırken, yalnızca çekme sunucusundaki yapılandırma ve düğüm yapılandırmasını gerektiği gibi yenilemeniz gerekir.

Resource Manager şablonuyla başlamıyorsanız sorun değil. VM'lerinizi çekme sunucusuna kaydetmenize yardımcı olacak PowerShell komutları vardır. Daha fazla bilgi için bkz. Azure Otomasyonu Durum Yapılandırmasına göre yönetim için makineleri ekleme.

Kullanım örneği hakkında

Bu makaledeki kullanım örneği, Azure galerisindeki genel bir Windows Server 2012 R2 görüntüsünden bir VM ile başlar. Depolanan herhangi bir görüntüden başlayabilir ve ardından DSC yapılandırmasıyla buradan ince ayar yapabilirsiniz. Ancak, bir görüntüde pişirilen yapılandırmayı değiştirmek, DSC kullanarak yapılandırmayı dinamik olarak güncelleştirmekten çok daha zordur.

Bu tekniği VM'lerinizle kullanmak için Resource Manager şablonu ve VM uzantısı kullanmanız gerekmez. AYRıCA VM'lerinizin CD yönetimi altında olması için Azure'da olması gerekmez. Tek gereken Chocolatey'nin yüklenmesi ve çekme sunucusunun nerede olduğunu bilmesi için VM'de LCM'nin yapılandırılmasıdır.

Üretimde olan bir VM'deki bir paketi güncelleştirdiğinizde, güncelleştirme yüklenirken bu VM'yi döngüden çıkarmanız gerekir. Bunu nasıl yaptığınız büyük ölçüde değişir. Örneğin, Azure Load Balancer'ın arkasında bir VM ile Özel Yoklama ekleyebilirsiniz. VM'yi güncelleştirirken yoklama uç noktasının 400 döndürmesini sağlayın. Bu değişikliğe neden olmak için gereken ince ayar yapılandırmanızın içinde olabilir ve güncelleştirme tamamlandıktan sonra 200 döndüren ince ayar da yapılandırmanızda olabilir.

Bu kullanım örneğinin tam kaynağı GitHub'daki bu Visual Studio projesindedir .

1. Adım: Çekme sunucusunu ve Otomasyon hesabını ayarlama

Kimliği doğrulanmış (Connect-AzAccount) bir PowerShell komut satırında: (çekme sunucusu ayarlanırken birkaç dakika sürebilir)

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

Otomasyon hesabınızı şu bölgelerden herhangi birine (konum olarak da bilinir) koyabilirsiniz: Doğu ABD 2, Orta Güney ABD, ABD Gov Virginia, Batı Avrupa, Güneydoğu Asya, Doğu Japonya, Orta Hindistan ve Güneydoğu Avustralya, Orta Kanada, Kuzey Avrupa.

2. Adım: Resource Manager şablonunda VM uzantısı ayarlamaları yapma

Bu Azure Hızlı Başlangıç Şablonu'nda sağlanan VM kaydı (PowerShell DSC VM uzantısı kullanılarak) için ayrıntılar. Bu adım, yeni VM'nizi Durum Yapılandırma Düğümleri listesindeki çekme sunucusuna kaydeder. Bu kaydın bir parçası, düğüme uygulanacak düğüm yapılandırmasını belirtmektir. Bu düğüm yapılandırmasının çekme sunucusunda henüz mevcut olması gerekmez, bu nedenle 4. adımın ilk kez yapıldığı yer olması sorun değildir. Ancak burada 2. Adımda düğümün adına ve yapılandırmanın adına karar vermiş olmanız gerekir. Bu kullanım örneğinde düğüm 'isvbox' ve yapılandırma ise 'ISVBoxConfig' şeklindedir. Bu nedenle düğüm yapılandırma adı (DeploymentTemplate.json içinde belirtilecek) 'ISVBoxConfig.isvbox' olur.

3. Adım: Çekme sunucusuna gerekli DSC kaynaklarını ekleme

PowerShell Galerisi, DSC kaynaklarını Azure Otomasyonu hesabınıza yüklemek için izlenmiştir. İstediğiniz kaynağa gidin ve "Azure Otomasyonu dağıt" düğmesine tıklayın.

PowerShell Gallery example

Kısa süre önce Azure portalına eklenen başka bir teknik, yeni modülleri çekmenize veya mevcut modülleri güncelleştirmenize olanak tanır. Otomasyon hesabı kaynağına, Varlıklar kutucuğuna ve son olarak Modüller kutucuğuna tıklayın. Galeriye Gözat simgesi galerideki modüllerin listesini görmenize, ayrıntılarda detaya gitmenize ve sonunda Otomasyon hesabınıza aktarmanıza olanak tanır. Bu, modüllerinizi zaman zaman güncel tutmanın harika bir yoludur. İçeri aktarma özelliği, hiçbir şeyin eşitlenmediğinden emin olmak için diğer modüllerle bağımlılıkları denetler.

Ayrıca, daha sonra yükseltmek istemediğiniz sürece kaynak başına yalnızca bir kez kullanılan el ile bir yaklaşım da vardır. PowerShell tümleştirme modülleri yazma hakkında daha fazla bilgi için bkz. Azure Otomasyonu için Tümleştirme Modülleri Yazma.

Dekont

Bir Windows bilgisayarı için PowerShell tümleştirme modülünün klasör yapısı, Azure Otomasyonu tarafından beklenen klasör yapısından biraz farklıdır.

  1. Windows Management Framework v5'i yükleyin (Windows 10 için gerekli değildir).

  2. Tümleştirme modülünü yükleyin.

    Install-Module -Name MODULE-NAME`    <—grabs the module from the PowerShell Gallery
    
  3. c:\Program Files\WindowsPowerShell\Modules\MODULE-NAME modül klasörünü geçici bir klasöre kopyalayın.

  4. Örnekleri ve belgeleri ana klasörden silin.

  5. Zip dosyasını klasörün adıyla adlandırarak ana klasörü sıkıştırın.

  6. ZIP dosyasını azure Depolama hesabındaki blob depolama gibi erişilebilir bir HTTP konumuna yerleştirin.

  7. Aşağıdaki komutu çalıştırın.

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

Dahil edilen örnek cChoco ve xNetworking için bu adımları uygular.

4. Adım: Düğüm yapılandırmasını çekme sunucusuna ekleme

Yapılandırmanızı çekme sunucusuna ilk kez içeri aktardığınızda ve derlediğinizde özel bir şey yoktur. Aynı yapılandırmanın sonraki tüm içeri aktarmaları veya derlemeleri tam olarak aynı görünür. Paketinizi her güncelleştirdiğinizde ve üretime göndermeniz gerektiğinde, yapılandırma dosyasının doğru olduğundan emin olduktan sonra (paketinizin yeni sürümü dahil) bu adımı gerçekleştirirsiniz. ISVBoxConfig.ps1 yapılandırma dosyası aşağıdadır:

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'
        }
    }
}

New-ConfigurationScript.ps1 betiği aşağıdadır (Az modülünü kullanacak şekilde değiştirilmiştir):

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

Bu adımlar, çekme sunucusuna ISVBoxConfig.isvbox adlı yeni bir düğüm yapılandırması yerleştirilmesine neden oluyor. Düğüm yapılandırma adı olarak configurationName.nodeNameoluşturulur.

5. Adım: Paket meta verilerini oluşturma ve koruma

Paket deposuna yerleştirdiğiniz her paket için bunu açıklayan bir Nuspec gerekir. NuGet sunucunuzda derlenmiş ve depolanmalıdır. Bu işlem burada açıklanmıştır.

MyGet.org NuGet sunucusu olarak kullanabilirsiniz. Bu hizmeti satın alabilirsiniz, ancak ücretsiz bir başlangıç SKU'susunuz. NuGet'te, özel paketleriniz için kendi NuGet sunucunuzu yükleme yönergelerini bulabilirsiniz.

6. Adım: Hepsini birbirine bağlayın

Bir sürüm Soru-Cevap'ı her geçtiğinde ve dağıtım için onaylandığında paket oluşturulur ve nuspec ve nupkg güncelleştirilip NuGet sunucusuna dağıtılır. Yapılandırma (4. adım) yeni sürüm numarasını kabul etmek için de güncelleştirilmelidir. Daha sonra çekme sunucusuna gönderilmeli ve derlenmelidir.

Bu noktadan sonra, güncelleştirmeyi çekmek ve yüklemek bu yapılandırmaya bağlı olan VM'lere bağlıdır. Bu güncelleştirmelerin her biri basittir; yalnızca bir veya iki PowerShell satırı. Azure DevOps için bazıları, derlemede birbirine zincirlenebilen derleme görevlerinde kapsüllenir. Bu makalede daha fazla ayrıntı sağlanır. Bu GitHub deposu , kullanılabilir derleme görevlerinin ayrıntılarını içerir.

Sonraki adımlar