DSC ile Sürekli Tümleştirme ve Sürekli Dağıtım işlem hattı geliştirme
Azure Pipelines | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018 | TFS 2017
Not
Microsoft Team Foundation Server (TFS) 2018 ve önceki sürümlerde derleme ve yayın işlem hatları tanımlar, çalıştırmalar derlemeler, hizmet bağlantıları hizmet uç noktaları,aşamalar ortamlar ve işler olarak adlandırılan aşamalar olarak adlandırılanlardır.
Bu örnekte, PowerShell, DSC ve Nedener kullanılarak Sürekli Tümleştirme/Sürekli Dağıtım (CI/CD) işlem hattı oluşturma işlemi gösteriliyor.
İşlem hattı yapılandırıldıktan ve yapılandırıldığında, bir DNS sunucusunu ve ilişkili konak kayıtlarını tam olarak dağıtmak, yapılandırmak ve test etmek için bunu kullanabilirsiniz. Bu işlem, geliştirme ortamında kullanılacak bir işlem hattının ilk bölümünü simüle eder.
Otomatik CI/CD işlem hattı, yazılımları daha hızlı ve daha güvenilir bir şekilde güncelleştirmenize yardımcı olur. Böylece tüm kodlar test edilir ve kodunuzun geçerli bir derlemesi her zaman kullanılabilir olur.
Önkoşullar
Bu örneği kullanmak için aşağıdakilere aşina olmak gerekir:
- CI-CD kavramları. İyi bir başvuru Yayın İşlem Hattı Modeli'nde bulunabilir.
- Git kaynak denetimi
- TheSiter test çerçevesi
- Desired State Configuration(DSC)
Size gerekenler
Bu örneği derlemek ve çalıştırmak için çeşitli bilgisayarlara ve/veya sanal makinelere sahip bir ortama ihtiyacınız vardır.
İstemci
Bu bilgisayar, örneği ayarp çalıştırmanın tüm çalışmalarını sizin yapacaksınız. İstemci bilgisayar, aşağıdaki Windows bir bilgisayar olmalıdır:
- Git
- 'den kopyalanan yerel bir git depo https://github.com/PowerShell/Demo_CI
- gibi bir metin Visual Studio Code
Azure DevOps Abonelik
Bir Azure DevOps kuruluş. Microsoft hesabınız yoksa ücretsiz olarak oluşturabilirsiniz. (Azure DevOps kuruluş, GitHub farklıdır. Aralarında hizalama yapmak için aynı adı girin.)
TFSSrv
Derlemenizi ve yayınını tanımladığınız TFS sunucusunu barındıran bilgisayar. Bu bilgisayarda 2017 Team Foundation Server yüklü olmalıdır.
BuildAgent
Projeyi derlemek için Windows aracıyı çalıştıran bilgisayar. Bu bilgisayarda yüklü ve Windows bir derleme aracısı olmalıdır. Derleme aracılarını yükleme ve Windows hakkında yönergeler için bkz. Windows aracı dağıtma.
Ayrıca bu bilgisayara hem hem xDnsServer de xNetworking DSC modüllerini yüklemeniz gerekir.
TestAgent1
Bu, bu örnekte DSC yapılandırması tarafından DNS sunucusu olarak yapılandırılan bilgisayardır. Bilgisayarın üzerinde çalışıyor olması Windows Server 2016.
TestAgent2
Bu, bu örneğin yapılandırmış olduğu web sitesini barındıran bilgisayardır. Bilgisayarın üzerinde çalışıyor olması Windows Server 2016.
Kodu depoya ekleme
Başlangıç olarak bir Git deposu oluşturacak ve istemci bilgisayarda yerel depodan kodu içeri aktararak başlayacağız. İstemci bilgisayarınıza Demo_CI henüz kopyalamadıysanız, şimdi aşağıdaki git komutunu çalıştırarak bunu yapın:
git clone https://github.com/PowerShell/Demo_CI
İstemci bilgisayarınızda, bir web tarayıcısında TFS sunucunuza gidin.
Demo_CI adlı yeni bir takım Demo_CI.
Sürüm denetimi'nin Git olarak ayarlanmış olduğundan emin olun.
İstemci bilgisayarınızda, aşağıdaki komutla TFS'de yeni oluşturduğunuz depoya bir uzak depo ekleyin:
git remote add tfs <YourTFSRepoURL>Burada,
<YourTFSRepoURL>önceki adımda oluşturduğunuz TFS deposunun kopya URL'sidir.Bu URL'yi nerede bulamanız gerektir bilmiyorsanız bkz. Mevcut Git depolarını kopyalama.
Aşağıdaki komutu kullanarak yerel depodan TFS deponıza kodu itin:
git push tfs --allTFS deposu, Demo_CI doldurulur.
Web tarayıcısında Azure DevOps aboneliğinize gidin.
Demo_CI adlı yeni bir takım Demo_CI. Sürüm denetimi'nin Git olarak ayarlanmış olduğundan emin olun.
İstemci bilgisayarınızda, aşağıdaki komutla yeni oluşturduğunuz depoya bir uzak depo ekleyin:
git remote add devops <YourDevOpsRepoURL>Burada,
<YourDevOpsRepoURL>önceki adımda oluşturduğunuz Azure DevOps deposunun kopya URL'sidir.Bu URL'yi nerede bulamanız gerektir bilmiyorsanız bkz. Mevcut Git depolarını kopyalama.
Aşağıdaki komutu kullanarak yerel depodan TFS deponıza kodu itin:
git push devops --allAzure DevOps depo, yeni kod Demo_CI doldurulur.
Not
Bu ci-cd-example örnek, Git depos nun dallarında kodu kullanır. Bu dalı projenizin varsayılan dalı olarak ve sizin oluşturdukları CI/CD tetikleyicileri için belirttiğinizden emin olun.
Kodu anlama
Derleme ve dağıtım işlem hatlarını oluşturmadan önce, neler olduğunu anlamak için bazı kodlara göz atabilirsiniz. İstemci bilgisayarınızda, sık kullanılan metin düzenleyicinizi açın ve Git deposunu Demo_CI gidin.
DSC yapılandırması
dosyasını açın DNSServer.ps1 (yerel deponun kökünden Demo_CI). ./InfraDNS/Configs/DNSServer.ps1
Bu dosya, DNS sunucusunu ayaran DSC yapılandırmasını içerir. Bu tamamen şu şekildedir:
configuration DNSServer
{
Import-DscResource -module 'xDnsServer','xNetworking', 'PSDesiredStateConfiguration'
Node $AllNodes.Where{$_.Role -eq 'DNSServer'}.NodeName
{
WindowsFeature DNS
{
Ensure = 'Present'
Name = 'DNS'
}
xDnsServerPrimaryZone $Node.zone
{
Ensure = 'Present'
Name = $Node.Zone
DependsOn = '[WindowsFeature]DNS'
}
foreach ($ARec in $Node.ARecords.keys) {
xDnsRecord $ARec
{
Ensure = 'Present'
Name = $ARec
Zone = $Node.Zone
Type = 'ARecord'
Target = $Node.ARecords[$ARec]
DependsOn = '[WindowsFeature]DNS'
}
}
foreach ($CName in $Node.CNameRecords.keys) {
xDnsRecord $CName
{
Ensure = 'Present'
Name = $CName
Zone = $Node.Zone
Type = 'CName'
Target = $Node.CNameRecords[$CName]
DependsOn = '[WindowsFeature]DNS'
}
}
}
}
deyimine Node dikkat:
Node $AllNodes.Where{$_.Role -eq 'DNSServer'}.NodeName
Bu, betik tarafından oluşturulan yapılandırma verisinde rolüne sahip olarak DNSServer tanımlanan tüm düğümleri DNSServerDevEnv.ps1 bulur.
yöntemi hakkında daha fazla bilgi için Where aşağıdaki about_arrays Where
Düğüm bilgileri ortamlar arasında büyük olasılıkla değişe değişe ve yapılandırma verilerini kullanarak yapılandırma kodunu değiştirmeden düğüm bilgilerinden kolayca değişiklik yapabilirsiniz çünkü CI yaparken düğümleri tanımlamak için yapılandırma verilerini kullanmak önemlidir.
İlk kaynak bloğunda yapılandırma, DNS özelliğinin etkinleştirildiğinden emin olmak için WindowsFeature çağrısında ilmiştir. Birincil bölgeyi ve DNS kayıtlarını yapılandırmak için xDnsServer modülünden çağrı kaynaklarını takip alan kaynak blokları.
İki bloğun xDnsRecord yapılandırma verisi foreach dizileri arasında tekrar eden döngüler içinde sarmalanmış olduğunu fark edersiniz. Yine yapılandırma verileri betik tarafından DevEnv.ps1 oluşturulur ve bir sonraki adıma bakacağız.
Yapılandırma verileri
dosyası (yerel Demo_CI deposunun kökünden), karma tablo içinde ortama özgü yapılandırma verilerini belirtir ve ardından bu karma tabloyu () içinde tanımlanan işlev çağrısına DevEnv.ps1./InfraDNS/DevEnv.ps1New-DscConfigurationDataDocumentDscPipelineTools.psm./Assets/DscPipelineTools/DscPipelineTools.psm1 iletir.
DevEnv.ps1Dosya:
param(
[parameter(Mandatory=$true)]
[string]
$OutputPath
)
Import-Module $PSScriptRoot\..\Assets\DscPipelineTools\DscPipelineTools.psd1 -Force
# Define Unit Test Environment
$DevEnvironment = @{
Name = 'DevEnv';
Roles = @(
@{ Role = 'DNSServer';
VMName = 'TestAgent1';
Zone = 'Contoso.com';
ARecords = @{'TFSSrv1'= '10.0.0.10';'Client'='10.0.0.15';'BuildAgent'='10.0.0.30';'TestAgent1'='10.0.0.40';'TestAgent2'='10.0.0.50'};
CNameRecords = @{'DNS' = 'TestAgent1.contoso.com'};
}
)
}
return New-DscConfigurationDataDocument -RawEnvData $DevEnvironment -OutputPath $OutputPath
işlevi (içinde tanımlanır) ve parametreleri olarak geçirilen karma tablosu New-DscConfigurationDataDocument (düğüm verileri) ve diziden (düğüm olmayan veriler) program aracılığıyla bir yapılandırma verileri \Assets\DscPipelineTools\DscPipelineTools.psm1RawEnvData belgesi OtherEnvData oluşturur.
Bizim durumumuz için yalnızca RawEnvData parametresi kullanılır.
psake derleme betiği
içinde tanımlanan psake derleme betiği (Demo_CI deposunun kökünden), derlemenin parçası olan görevleri ./InfraDNS/Build.ps1 tanımlar. Ayrıca her görevin hangi görevlere bağlı olduğunu da tanımlar. Çağrıldığında, psake betiği belirtilen görevin (veya belirtilmemişse adlandırılmış görevin) ve tüm bağımlılıkların da (bağımlılıkların bağımlılıklarının çalışması için bu yinelidir, vb.) çalışmasına yardımcı Default olur.
Bu örnekte görev Default şu şekilde tanımlanır:
Task Default -depends UnitTests
Görevin Default kendi uygulaması yoktur, ancak göreve bağımlılığı CompileConfigs vardır.
Sonuçta elde edilen görev bağımlılıkları zinciri, derleme betiğinde tüm görevlerin çalıştırılamalarını sağlar.
Bu örnekte, psake betiği dosyasında çağrısıyla çağrılır (dosyanın kök Invoke-PSakeInitiate.ps1 Demo_CI bulunur):
param(
[parameter()]
[ValidateSet('Build','Deploy')]
[string]
$fileName
)
#$Error.Clear()
Invoke-PSake $PSScriptRoot\InfraDNS\$fileName.ps1
<#if($Error.count)
{
Throw "$fileName script failed. Check logs for failure details."
}
#>
Örneğimiz için derleme tanımını oluşturdukta, bu betik için parametre olarak psake betik fileName dosyamızı sağlariz.
Derleme betiği aşağıdaki görevleri tanımlar:
GenerateEnvironmentFiles
, DevEnv.ps1 yapılandırma veri dosyasını oluşturan 'i çalıştırır.
InstallModules
yapılandırması için gereken modülleri DNSServer.ps1 yüklenir.
ScriptAnalysis
UnitTests
Siter birim testlerini çalıştırır.
CompileConfigs
Görev tarafından oluşturulan yapılandırma verilerini kullanarak yapılandırmayı ( ) bir DNSServer.ps1 MOF dosyasına GenerateEnvironmentFiles derler.
Temizle
Örnek için kullanılan klasörleri oluşturur ve önceki çalıştırmalardan tüm test sonuçlarını, yapılandırma veri dosyalarını ve modülleri kaldırır.
psake dağıtım betiği
içinde tanımlanan psake dağıtım betiği (Demo_CI deposunun kökünden), yapılandırmayı dağıtan ve çalıştıran ./InfraDNS/Deploy.ps1 görevleri tanımlar.
Deploy.ps1 aşağıdaki görevleri tanımlar:
DeployModules
üzerinde bir PowerShell oturumu başlatır ve yapılandırma TestAgent1 için gereken DSC kaynaklarını içeren modülleri yüklenir.
DeployConfigs
Üzerinde yapılandırmayı çalıştırmak için Start-DscConfiguration cmdlet'ini arar.
IntegrationTests
Siter tümleştirme testlerini çalıştırır.
Kabul Testleri
Siter kabul testlerini çalıştırır.
Temizle
Önceki çalıştırmalarda yüklü olan modülleri kaldırır ve test sonucu klasörünün mevcut olması sağlar.
Test betikleri
Kabul, Tümleştirme ve Birim testleri, klasördeki betiklerde (Demo_CI deposunun kökünden), her biri kendi klasörlerinde adlı Tests./InfraDNS/TestsDNSServer.tests.ps1 dosyalarda tanımlanır.
Test betikleri, Tehdit vePoshSpec söz dizimi kullanır.
Birim testleri
Birim testleri DSC yapılandırmalarını test eder ve bu yapılandırmaların çalıştırilmalarında bekleneni yapmalarını sağlar. Birim testi betiğiNdeleer kullanır.
Tümleştirme testleri
Tümleştirme testleri, diğer bileşenlerle tümleştirıldığında sistemin beklendiği gibi yapılandırıldığından emin olmak için sistemin yapılandırmasını test ediyor. Bu testler, DSC ile yapılandırıldıktan sonra hedef düğümde çalıştırılan testlerdir. Tümleştirme testi betiği, Dizim ve PoshSpec söz dizimlerinin bir karışımını kullanır.
Kabul testleri
Kabul testleri, sistemin beklendiği gibi davranması için sistemi test ediyor. Örneğin, bir web sayfasının sorgulanan zaman doğru bilgileri döndürenin doğru olduğundan emin olmak için testler yapıyor. Bu testler, gerçek dünya senaryolarını test etmek için hedef düğümden uzaktan çalıştırabilirsiniz. Tümleştirme testi betiği, Dizim ve PoshSpec söz dizimlerinin bir karışımını kullanır.
Derlemeyi tanımlama
Artık kodumuz bir repoya yüklendikten ve ne yaptığına baktığımıza göre derlememizi tanımlayabiliriz.
Burada, yalnızca derlemeye ekley istediğiniz derleme adımlarını kapsacağız. Derleme tanımı oluşturma yönergeleri için bkz. Azure DevOps derleme tanımı oluşturma ve kuyruğa yükleme.
"InfraDNS" adlı yeni bir derleme tanımı oluşturun (Başlangıç İşlem Hattı şablonunu seçin). Derleme tanımınıza aşağıdaki adımları ekleyin:
- PowerShell
- Yayımlama Test Sonuçları
- Dosyaları Kopyalama
- Yapıt Yayımlama
Bu derleme adımlarını ekledikten sonra, her adımın özelliklerini aşağıdaki gibi düzenleyin:
PowerShell
- targetType özelliğini olarak ayarlayın.
- filePath özelliğini olarak ayarlayın.
- Bağımsız
-fileName buildDeğişkenler-fileName buildekleyin.
Bu derleme adımı, initiate.ps1 psake derleme betiği çağıran dosyasını çalıştırır.
Yayımlama Test Sonuçları
- TestResultsFormat'i olarak ayarlayın
- TestResultsFiles'i olarak ayarlayın
- TestRunTitle'i olarak ayarlayın.
- Denetim Seçeneklerinin Etkin ve Herzamançalıştır'ın seçili olduğundan emin olun.
Bu derleme adımı, birim testlerini daha önce baktığımız Scripter betiğinde çalıştırır ve sonuçları klasöründe InfraDNS/Tests/Results/*.xml depolar.
Dosyaları Kopyalama
Aşağıdaki satırların her birini İçindekiler'e ekleyin:
initiate.ps1 **\deploy.ps1 **\Acceptance\** **\Integration\**TargetFolder'i olarak ayarlayın
Bu adım, derleme ve test betiklerini hazırlama dizinine kopyalar, böylece bir sonraki adımda derleme yapıtları olarak yayımlanır.
Yapıt Yayımlama
- TargetPath'i olarak ayarlayın
- ArtifactName'i olarak ayarlayın
- Etkin olarak ayarlayın.
Sürekli tümleştirmeyi etkinleştirme
Şimdi, git deposunun dalda yapılan bir değişiklik iade edilirken projenin derlemeye neden olan ci-cd-example bir tetikleyici ayarlayabilirsiniz.
- TFS'de Derleme Sürümü sekmesine tıklayın
- Derleme tanımını
DNS Infraseçin ve Düzenle'yeDNS Infra - Tetikleyiciler sekmesine tıklayın
- Sürekli tümleştirme (CI)öğesini seçin ve dal açılan listesinden öğesini seçin
- Kaydet'e ve ardından Tamam'a tıklayın
Git deposundaki herhangi bir değişiklik otomatik derlemeyi tetikler.
Yayın tanımını oluşturma
Şimdi projenin her kod iade ile geliştirme ortamına dağıtılması için bir yayın tanımı oluşturabilirsiniz.
Bunu yapmak için, daha önce oluşturduğunuz derleme tanımıyla ilişkili InfraDNS yeni bir yayın tanımı ekleyin. Yeni bir derleme tamamlandığında yeni bir sürümün tetiklensin diye Sürekli dağıtım'ı seçin. (Yayın işlem hatları nedir?) ve aşağıdaki gibi yapılandırabilirsiniz:
Yayın tanımına aşağıdaki adımları ekleyin:
- PowerShell
- Yayımlama Test Sonuçları
- Yayımlama Test Sonuçları
Adımları aşağıdaki gibi düzenleyin:
PowerShell
- TargetPath alanını olarak ayarlayın
- Bağımsız Değişkenler alanını olarak ayarlayın
İlk Yayımlama Test Sonuçları
NUnitNUnitseçin- TestResultsFiles alanını olarak ayarlayın
- TestRunTitle'i olarak ayarlayın
- Koşulu olarak ayarlayın
İkinci Yayımlama Test Sonuçları
NUnitNUnitseçin- TestResultsFiles alanını olarak ayarlayın
- TestRunTitle'i olarak ayarlayın
- Koşulu olarak ayarlayın
Sonuçlarınızı doğrulama
Şimdi, dalda değişiklikleri her ci-cd-example itişte yeni bir derleme başlar. Yapı başarıyla tamamlanırsa yeni bir dağıtım tetiklenir.
İstemci makinesinde bir tarayıcı açarak ve ' a giderek dağıtım sonucunu denetleyebilirsiniz www.contoso.com .
Sonraki adımlar
Bu örnek, TestAgent1 URL 'nin www.contoso.com ÇÖZÜMLENMEMESI için DNS sunucusunu yapılandırır TestAgent2 , ancak gerçekte bir Web sitesi dağıtmaz. Bunun için iskelet, klasörün altındaki depoda verilmiştir WebApp . Kendi web sitenizi dağıtmak için psake betikleri, pester testleri ve DSC yapılandırması oluşturmak için belirtilen saplamaları kullanabilirsiniz.