ARM şablonlarını Azure Pipelines ile tümleştirme

Sürekli tümleştirme ve sürekli dağıtım (CI/CD) için Azure Resource Manager şablonlarını (ARM şablonları) Azure Pipelines ile tümleştirebilirsiniz. Bu makalede, Azure Pipelines ile şablon dağıtmanın iki gelişmiş yolunu öğreneceksiniz.

Seçeneğinizi belirtin

Bu makaleye devam etmeden önce, işlem hattından ARM şablonu dağıtmak için farklı seçenekleri göz önünde bulunduralım.

  • ARM şablonu dağıtım görevini kullanın. Bu seçenek en kolay seçenektir. Bu yaklaşım, bir şablonu doğrudan depodan dağıtmak istediğinizde çalışır. Bu seçenek bu makalede ele alınmıyor, bunun yerine ARM şablonlarının Azure Pipelines ile sürekli tümleştirme öğreticisinde ele alınmaktadır. GitHub deponuzdan şablon dağıtmak için ARM şablonu dağıtım görevinin nasıl kullanılacağını gösterir.

  • Azure PowerShell betiği çalıştıran görev ekleyin. Bu seçenek, yerel testleri çalıştırırken kullandığınız betiği kullanabileceğiniz için geliştirme yaşam döngüsü boyunca tutarlılık sağlama avantajına sahiptir. Betiğiniz şablonu dağıtır ancak parametre olarak kullanılacak değerleri alma gibi diğer işlemleri de gerçekleştirebilir. Bu seçenek bu makalede gösterilmiştir. Bkz. Azure PowerShell görev.

    Visual Studio, PowerShell betiği içeren Azure Kaynak Grubu projesini sağlar. Betik, yapıtları projenizden Resource Manager erişebileceği bir depolama hesabına hazırlar. Yapıtlar projenizdeki bağlantılı şablonlar, betikler ve uygulama ikili dosyaları gibi öğelerdir. Projedeki betiği kullanmaya devam etmek istiyorsanız, bu makalede gösterilen PowerShell betik görevini kullanın.

  • Görevleri kopyalamak ve dağıtmak için görevler ekleyin. Bu seçenek, proje betiğine uygun bir alternatif sunar. İşlem hattında iki görev yapılandırabilirsiniz. Bir görev, yapıtları erişilebilir bir konuma hazırlar. Diğer görev şablonu bu konumdan dağıtır. Bu seçenek bu makalede gösterilmiştir. Bkz. Görevleri kopyalama ve dağıtma.

Projenizi hazırlama

Bu makalede ARM şablonunuzun ve Azure DevOps kuruluşunuzun işlem hattını oluşturmaya hazır olduğu varsayılır. Aşağıdaki adımlarda hazır olduğunuzdan nasıl emin olduğunuz gösterilir:

  • Azure DevOps kuruluşunuz var. Aboneliğiniz yoksa ücretsiz olarak oluşturun. Ekibinizin zaten bir Azure DevOps kuruluşu varsa, kullanmak istediğiniz Azure DevOps projesinin yöneticisi olduğunuzdan emin olun.

  • Azure aboneliğinize bir hizmet bağlantısı yapılandırdıysanız. İşlem hattındaki görevler hizmet sorumlusunun kimliği altında yürütülür. Bağlantı oluşturma adımları için bkz. DevOps projesi oluşturma.

  • Projenizin altyapısını tanımlayan bir ARM şablonunuz var.

İşlem hattı oluşturma

  1. Daha önce işlem hattı eklemediyseniz yeni bir işlem hattı oluşturmanız gerekir. Azure DevOps kuruluşunuzda İşlem Hatları ve Yeni işlem hattı'yı seçin.

    Yeni işlem hattı ekle düğmesinin ekran görüntüsü

  2. Kodunuzun depolandığı yeri belirtin. Aşağıdaki resimde Azure Repos Git'in seçilmesi gösterilmektedir.

    Azure DevOps'ta kod kaynağını seçme işleminin ekran görüntüsü

  3. Bu kaynaktan projenizin kodunu içeren depoyu seçin.

    Azure DevOps'ta projenin deposunu seçme işleminin ekran görüntüsü

  4. Oluşturulacak işlem hattı türünü seçin. Starter işlem hattını seçebilirsiniz.

    Azure DevOps'ta oluşturulacak işlem hattı türünü seçme işleminin ekran görüntüsü

bir Azure PowerShell görevi veya kopyalama dosyasını ekleyip görevleri dağıtmaya hazırsınız.

Azure PowerShell görevi

Bu bölümde, projenizde PowerShell betiğini çalıştıran tek bir görev kullanarak sürekli dağıtımı yapılandırma işlemi gösterilmektedir. Şablon dağıtan bir PowerShell betiğine ihtiyacınız varsa bkz. Deploy-AzTemplate.ps1 veya Deploy-AzureResourceGroup.ps1.

Aşağıdaki YAML dosyası bir Azure PowerShell görevi oluşturur:

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: AzurePowerShell@5
  inputs:
    azureSubscription: 'script-connection'
    ScriptType: 'FilePath'
    ScriptPath: './Deploy-AzTemplate.ps1'
    ScriptArguments: -Location 'centralus' -ResourceGroupName 'demogroup' -TemplateFile templates\mainTemplate.json
    azurePowerShellVersion: 'LatestVersion'

Görevi olarak AzurePowerShell@5ayarladığınızda işlem hattı Az modülünü kullanır. Betiğinizde AzureRM modülünü kullanıyorsanız, görevi olarak AzurePowerShell@3ayarlayın.

steps:
- task: AzurePowerShell@3

için azureSubscription, oluşturduğunuz hizmet bağlantısının adını belirtin.

inputs:
    azureSubscription: '<your-connection-name>'

için scriptPathişlem hattı dosyasından betiğinize göreli yolu sağlayın. Yolu görmek için deponuza bakabilirsiniz.

ScriptPath: '<your-relative-path>/<script-file-name>.ps1'

içinde ScriptArguments, betiğinizin ihtiyaç duyduğu tüm parametreleri sağlayın. Aşağıdaki örnekte bir betik için bazı parametreler gösterilmektedir, ancak betiğinizin parametrelerini özelleştirmeniz gerekir.

ScriptArguments: -Location 'centralus' -ResourceGroupName 'demogroup' -TemplateFile templates\mainTemplate.json

Kaydet'i seçtiğinizde derleme işlem hattı otomatik olarak çalıştırılır. Derleme işlem hattınızın özetine Geri dön ve durumu watch.

Azure DevOps'ta işlem hattı sonuçları görünümünün ekran görüntüsü

Görevlerle ilgili ayrıntıları görmek için çalışmakta olan işlem hattını seçebilirsiniz. Tamamlandığında, her adımın sonuçlarını görürsünüz.

Görevleri kopyalama ve dağıtma

Bu bölümde, iki görev kullanarak sürekli dağıtımı yapılandırma gösterilmektedir. İlk görev yapıtları bir depolama hesabına hazırlar ve ikinci görev şablonu dağıtır.

Dosyaları bir depolama hesabına kopyalamak için hizmet bağlantısının hizmet sorumlusuna Depolama Blob Verileri Katkıda Bulunanı veya Depolama Blob Verileri Sahibi rolü atanmalıdır. Daha fazla bilgi için bkz. AzCopy'yi kullanmaya başlama.

Aşağıdaki YAML, Azure dosya kopyalama görevini gösterir.

trigger:
- master

pool:
  vmImage: 'windows-latest'

steps:
- task: AzureFileCopy@4
  inputs:
    SourcePath: 'templates'
    azureSubscription: 'copy-connection'
    Destination: 'AzureBlob'
    storage: 'demostorage'
    ContainerName: 'projecttemplates'
  name: AzureFileCopy

Bu görevin ortamınız için gözden geçirmeniz gereken birkaç bölümü vardır. , SourcePath yapıtların işlem hattı dosyasına göre konumunu gösterir.

SourcePath: '<path-to-artifacts>'

için azureSubscription, oluşturduğunuz hizmet bağlantısının adını belirtin.

azureSubscription: '<your-connection-name>'

Depolama ve kapsayıcı adı için, yapıtları depolamak için kullanmak istediğiniz depolama hesabının ve kapsayıcının adlarını sağlayın. Depolama hesabı mevcut olmalıdır.

storage: '<your-storage-account-name>'
ContainerName: '<container-name>'

Dosya kopyalama görevini oluşturduktan sonra, hazırlanan şablonu dağıtmak için görevi eklemeye hazırsınız demektir.

Aşağıdaki YAML, Azure Resource Manager şablonu dağıtım görevini gösterir:

- task: AzureResourceManagerTemplateDeployment@3
  inputs:
    deploymentScope: 'Resource Group'
    azureResourceManagerConnection: 'copy-connection'
    subscriptionId: '00000000-0000-0000-0000-000000000000'
    action: 'Create Or Update Resource Group'
    resourceGroupName: 'demogroup'
    location: 'West US'
    templateLocation: 'URL of the file'
    csmFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.json$(AzureFileCopy.StorageContainerSasToken)'
    csmParametersFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.parameters.json$(AzureFileCopy.StorageContainerSasToken)'
    deploymentMode: 'Incremental'
    deploymentName: 'deploy1'

Bu görevin daha ayrıntılı olarak gözden geçirilmesi gereken birkaç bölümü vardır.

  • deploymentScope: , ve seçeneklerinden dağıtım kapsamını seçin: Management Group, Subscriptionve Resource Group. Kapsamlar hakkında daha fazla bilgi edinmek için bkz . Dağıtım kapsamları.

  • azureResourceManagerConnection: Oluşturduğunuz hizmet bağlantısının adını belirtin.

  • subscriptionId: Hedef abonelik kimliğini belirtin. Bu özellik yalnızca Kaynak Grubu dağıtım kapsamı ve abonelik dağıtım kapsamı için geçerlidir.

  • resourceGroupName ve location: Dağıtmak istediğiniz kaynak grubunun adını ve konumunu belirtin. Görev, yoksa kaynak grubunu oluşturur.

    resourceGroupName: '<resource-group-name>'
    location: '<location>'
    
  • csmFileLink: Hazırlanan şablonun bağlantısını sağlayın. Değeri ayarlarken, dosya kopyalama görevinden döndürülen değişkenleri kullanın. Aşağıdaki örnek mainTemplate.json adlı bir şablona bağlanır. Templates adlı klasör, dosya kopyalama görevinin dosyayı kopyaladığı klasöre eklenmiştir. İşlem hattınızda, şablonunuzun yolunu ve şablonunuzun adını sağlayın.

    csmFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.json$(AzureFileCopy.StorageContainerSasToken)'
    

İşlem hattınız şöyle görünür:

trigger:
- master

pool:
  vmImage: 'windows-latest'

steps:
- task: AzureFileCopy@4
  inputs:
    SourcePath: 'templates'
    azureSubscription: 'copy-connection'
    Destination: 'AzureBlob'
    storage: 'demostorage'
    ContainerName: 'projecttemplates'
  name: AzureFileCopy
- task: AzureResourceManagerTemplateDeployment@3
  inputs:
    deploymentScope: 'Resource Group'
    azureResourceManagerConnection: 'copy-connection'
    subscriptionId: '00000000-0000-0000-0000-000000000000'
    action: 'Create Or Update Resource Group'
    resourceGroupName: 'demogroup'
    location: 'West US'
    templateLocation: 'URL of the file'
    csmFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.json$(AzureFileCopy.StorageContainerSasToken)'
    csmParametersFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.parameters.json$(AzureFileCopy.StorageContainerSasToken)'
    deploymentMode: 'Incremental'
    deploymentName: 'deploy1'

Kaydet'i seçtiğinizde derleme işlem hattı otomatik olarak çalıştırılır. İş durumunu görmek için İşler çerçevesinin altında İş'i seçin.

Sonraki adımlar